Chapter overview

In this chapter, I focus on the third of my three key questions about the development of representations of mental life: How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? Even more than other chapters, this question comes to life most vividly in the context of developmental comparisions; therefore I draw primarily on data from Studies 2-4, which included both adult and child samples; see [XX APPENDIX C?] for more on adults’ responses in Studies 1a-1d. For details about the methods of all studies, see Chapter II. The goal of this chapter is to provide “snapshots” of mental capacity attributions to various target characters in early childhood, middle childhood, and adulthood, and to explore in finer-grained detail more continuous changes in children’s beliefs about the mental lives of these characters between 4-9y of age, with particular attention to children’s assessment of animate vs. inanimate beings.

General analysis plan

High-level overview

In analyzing these datasets with an eye toward documenting the application or deployment of the conceptual representations described in Chapters III-IV, the basic insight is that the attribution of specific mental capacities to specific target characters provides evidence of how conceptual representations of mental life are deployed in everyday social cognition. In Chapter II, I illustrated this with the following example: If participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world. Here I will translate this general intuition into a specific analysis plan to be applied to each of these datasets in turn.

Details of analyses

XX

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In the context of this dissertation, Study 2 serves to provide an initial investigation of representations of mental life earlier in development, in what I have called middle childhood (7-9y). In this chapter, I focus on what this study can reveal about changes in the deployment of this concept between middle childhood and adulthood: How do US 7- to 9-year-old children’s attributions of BODY, HEART, and MIND compare to those of adults in their cultural context?

To review, in Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

To facilitate comparison between children and adults in Study 2, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].

Results

Children vs. adults

See Figure 5.2, panel A, for BODY, HEART, and MIND scores for both target characters among the 7- to 9-year-old children and adults in Study 2.

In the aggregate, both children and adults seem to have considered the beetle—the animate “edge case” featured in this study—to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.72, 95% CI: [0.66-0.77]; among children: 0.82, 95% CI: [0.79-0.86]) and perceptual-cognitive capacities (mean MIND score among adults: 0.69, 95% CI: [0.64-0.73]; among children: 0.70, 95% CI: [0.67-0.74]). However, adults and children appear to have diverged in their assessments of its abilities in the HEART domain: While adults tended to grant very little in the way of social-emotional abilities (mean HEART score among adults: 0.17, 95% CI: [0.12-0.23]), children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.58, 95% CI: [0.52-0.64]).

For the robot—the inanimate “edge case” featured in this study—both adults and children, in the aggregate, indicated a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.82, 95% CI: [0.77-0.87]; among children: 0.80, 95% CI: [0.76-0.84]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.10, 95% CI: [0.07-0.14]; mean HEART score: 0.06, 95% CI: [0.03-0.09]), while children granted middling abilities in both domains (mean BODY score: 0.35, 95% CI: [0.30-0.39]; mean HEART score: 0.51, 95% CI: [0.44-0.57]).

Table 5.1: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.11 [ 0.08, 0.15] * 0.75 [ 0.72, 0.78] *
Beetle vs. GM (adults) 0.31 [ 0.28, 0.34] * 0.06 [ 0.02, 0.10] * -0.07 [-0.10, -0.04] *
Children vs. adults 0.18 [ 0.13, 0.22] * 0.43 [ 0.37, 0.49] * 0.00 [-0.05, 0.04]
Interaction -0.07 [-0.11, -0.03] * -0.02 [-0.08, 0.03] 0.02 [-0.02, 0.06]

A series of Bayesian regression analyses confirmed these general impressions. Children’s BODY scores were generally higher than adults’ (see Table 5.1, “Children vs. adults” row for the BODY domain), particularly for the robot (see Figure 5.2, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.1, “Interaction” row for the BODY domain). Children’s HEART scores were also higher than adults’ (see Table 5.1, “Children vs. adults” row for the HEART domain, and Figure 5.2, middle row), but this difference did not vary substantially across target characters (see Table 5.1, “Interaction” row for the BODY domain). There were no substantial differences between children and adults in their MIND scores (see Table 5.1 and Figure 5.2, bottom row).

Taken together, these observations highlight one especially striking difference between children and adults: For both edge cases, regardless of animacy status, children attributed substantially more HEART than did adults. Indeed, fully 70% of adults in Study 2 had HEART scores < 0.08 (i.e., answered at most one of the 6 HEART items with a response of “KINDA,” and otherwise answered “NO” to all HEART items). The more uniform distribution of children’s HEART scores across the 0-1 range stands in stark contrast to this adult standard; see Figure 5.2, panel B.

Discussion

XX INSERT DISCUSSION

OUTLINE:

adults:

  • animate-inanimate distinction strongest in the BODY domain
  • neither edge case granted much HEART
  • both edge cases granted fair amount of MIND

children:

  • BODY:
    • animate-inanimate distinction in place
    • but general decreases, especially for the robot (animate-inanimate distinction becomes more clear/robust)
  • HEART: biggest age differences
    • both edge cases granted fair amount of HEART
    • both more than adults
    • decreases with age
  • MIND:
    • both edge cases granted fair amount of MIND
    • increases with age (though no reliable group differences)

Study 3: Conceptual change over early and middle childhood (4-9y)

Study 3 builds on the investigation of middle childhood (7-9y) initiated in Study 2 and extends this exploration of conceptual change into earlier childhood (4-6y). In this chapter, I again focus on what this study can reveal about changes in the deployment of this concept—i.e., the attribution of BODY, HEART, and MIND to various beings in the world—over the course of early and middle childhood (7-9y).

To review, in Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4.00-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Study 2, to facilitate comparison between the three age groups included in Study 3, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].

Results

Children vs. adults

See Figure 5.4, panel A, for BODY, HEART, and MIND scores for each of the nine target characters among the younger children (4-6y), older children (7-9y), and adults in Study 3, and Figure 5.4, panel B, for a visualization of scores with target characters grouped into animate beings (elephant, goat, mouse, bird beetle) vs. inanimate objects (teddy bear, doll, robot, computer). To facilitate comparison with Studies 2 and 4, I will focus here on animacy status, rather than analzying all target characters individually.

In the aggregate, all three age groups seem to have considered the animate beings included in this study to have a relatively high degree of physiological sensations (mean BODY score among adults: 0.91, 95% CI: [0.87-0.94]; among older children: 0.84, 95% CI: [0.81-0.87]; among younger children: 0.73, 95% CI: [0.67-0.78]), and a middling degree of social-emotional abilities (mean HEART score among adults: 0.42, 95% CI: [0.34-0.51]; among older children: 0.54, 95% CI: [0.48-0.60]; among younger children: 0.57, 95% CI: [0.51-0.64]). Assessments of animate beings’ abilities in the MIND domain appear to have varied more by age group: While adults tended to grant animate beings a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.84, 95% CI: [0.79-0.87]), younger children’s MIND scores tended to hover around the midpoint of the scale (mean: 0.50, 95% CI: [0.43-0.56]), with older children falling in between (mean: 0.66, 95% CI: [0.60-0.71]).

For the inanimate beings included in this study, there was a high degree of consensus among adults that such entities had virtually no physiological or social-emotional abilities (mean BODY score: 0.04, 95% CI: [0.01-0.07]; mean HEART score: 0.03, 95% CI: [0.01-0.08]). In contrast, both groups of children, in the aggregate, granted low to moderate abilities to inanimate beings in both the BODY domain (mean BODY score among older children: 0.19, 95% CI: [0.13-0.25]; among younger children: 0.29, 95% CI: [0.21-0.38]) and the HEART domain (mean HEART score among older children: 0.27, 95% CI: [0.18-0.37]; among younger children: 0.32, 95% CI: [0.24-0.40]). All three age groups, in the aggregate, granted middling perceptual-cognitive abilities to these inanimate characters (which included two “intelligent” technologies; mean MIND score among adults: 0.33, 95% CI: [0.23-0.43]; among older children: 0.47, 95% CI: [0.38-0.57]; among younger children: 0.34, 95% CI: [0.24-0.43]).

Table 5.3: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the animate characters compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and animacy status. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=2). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.47 [ 0.44, 0.51] * 0.23 [ 0.17, 0.28] * 0.58 [ 0.53, 0.64] *
Animate characters vs. GM (adults) 0.44 [ 0.40, 0.48] * 0.19 [ 0.14, 0.25] * 0.25 [ 0.20, 0.31] *
Older children (7-9y) vs. adults 0.04 [-0.01, 0.09] 0.18 [ 0.11, 0.26] * -0.02 [-0.10, 0.05]
Younger children (4-6y) vs. adults 0.04 [-0.02, 0.09] 0.22 [ 0.14, 0.29] * -0.17 [-0.24, -0.09] *
Interaction: Older children (7-9y) vs. adults -0.11 [-0.16, -0.05] * -0.06 [-0.13, 0.02] -0.16 [-0.23, -0.09] *
Interaction: Younger children (4-6y) vs. adults -0.22 [-0.27, -0.16] * -0.07 [-0.14, 0.01] -0.17 [-0.25, -0.10] *

A series of Bayesian regression analyses confirmed these general impressions of differences across age groups.

Neither older nor younger children’s BODY scores were generally higher than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the BODY domain), but in both groups of children the difference in BODY scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the BODY domain). Meanwhile, in the HEART domain, both older and younger children’s HEART scores were generally higher than adults’ (see Table 5.3, “Children vs. adults” row for the HEART domain, and Figure 5.4, middle row), but this difference did not vary substantially across target characters (see Table 5.3, “Interaction” row for the BODY domain). Finally, in the MIND domain, younger children’s (but not older children’s) MIND scores were substantially lower than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the MIND domain). In addition, in both groups of children the difference in MIND scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the MIND domain).

Discussion

XX INSERT DISCUSSION

OUTLINE:

adults: - like study 2, animate-inanimate distinction strongest in the BODY domain - like study 2, most beings not granted much HEART: variable among the animate beings (and very little among inanimates) - harkens back to ch04 - all animates granted MIND—and some inanimates (technologies, like study 2)

children:

  • BODY:
    • animate-inanimate distinction in place even in younger age group than study 2
    • but animate-inanimate distinction becomes more clear/robust with age
  • HEART:
    • like study 2, substantial child vs. adult differences (children > adults)…
    • …but NOT reflected in age diffs within the child samples!
    • especially persistant: over-attributions to mouse (?), robot (increasing!)
    • maybe HEART diffs are not developmental differences?
  • MIND:
    • more strongly than study 2, dramatic increases with age
    • like adults and like study 2, cuts across animate-inanimate distinction

Study 4: A focus on early childhood (4-5y)

Study 4 builds on Study 3 by providing a targeted investigation of representations of mental life in the preschool years (4-5y). In this chapter, I again focus on what this study can reveal about attributions of BODY, HEART, and MIND at the earliest point in development that I have examined so far, and compare the deployment of this concept among young children vs. adults.

To review, in Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities, with all aspects of the experimental design tailored to be appropriate for this youngest age group. This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Studies 2 and 3, to facilitate comparison between children and adults in Study 4, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].

Results

Children vs. adults

See Figure 5.6, panel A, for BODY, HEART, and MIND scores for both target characters among the 4- to 5-year-old children and adults in Study 4. On the whole, participants’ assessments of these two “edge cases” in Study 4 were similar to those of adults’ and 7- to 9-year-old children in Study 2.

As in Study 2, in the aggregate, both children and adults seem to have considered the beetle (the animate character) to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.77, 95% CI: [0.72-0.82]; among children: 0.73, 95% CI: [0.66-0.80]) and perceptual-cognitive capacities (mean MIND score among adults: 0.61, 95% CI: [0.55-0.66]; among children: 0.56, 95% CI: [0.47-0.65]). Adults granted relatively little in the way of social-emotional abilities to the beetle (mean HEART score among adults: 0.23, 95% CI: [0.16-0.29]), but—with the older children in Study 2—children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.46, 95% CI: [0.38-0.55]).

For the robot (the inanimate character) both adults and children, in the aggregate, indicated a moderate degree of perceptual-cognitive abilities (mean MIND score among adults: 0.62, 95% CI: [0.56-0.68]; among children: 0.55, 95% CI: [0.47-0.64]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, echoing the results of Study 2, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.05, 95% CI: [0.03-0.07]; mean HEART score: 0.05, 95% CI: [0.02-0.08]), while children granted middling abilities in both domains (mean BODY score: 0.36, 95% CI: [0.27-0.44]; mean HEART score: 0.43, 95% CI: [0.34-0.52]).

Table 5.5: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 5-year-old children in Study 4 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.14 [ 0.10, 0.17] * 0.61 [ 0.57, 0.65] *
Beetle vs. GM (adults) 0.36 [ 0.33, 0.39] * 0.09 [ 0.05, 0.12] * -0.01 [-0.05, 0.03]
Children vs. adults 0.13 [ 0.08, 0.19] * 0.31 [ 0.24, 0.38] * -0.06 [-0.14, 0.01]
Interaction -0.18 [-0.23, -0.12] * -0.07 [-0.14, 0.00] * 0.01 [-0.06, 0.08]

A series of Bayesian regression analyses confirmed these overall impressions, yielding remarkably similar results to the parallel comparison between 7- to 9-year-old children and adults in Study 2.

As in Study 2, children’s BODY scores were generally higher than adults’ (see Table 5.5, “Children vs. adults” row for the BODY domain). This appears to have been particularly true for the robot (see Figure 5.6, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.5, “Interaction” row for the BODY domain). Again, as in Study 2, children’s HEART scores were also higher than adults’ (see Table 5.5, “Children vs. adults” row for the HEART domain, and Figure 5.6, middle row). In Study 4, this difference between children and adults was slightly more pronounced for the robot than the beetle (see Table 5.5, “Interaction” row for the BODY domain). And yet again, as in Study 2, there were no substantial differences between children and adults in their MIND scores (see Table 5.5 and Figure 5.6, bottom row)

Discussion

XX INSERT DISCUSSION

OUTLINE:

adults:

  • like studies 2-3, animate-inanimate distinction strongest in the BODY domain
  • like study 1, edge cases not granted much HEART, but both granted fair amount of MIND

children:

  • BODY:
    • animate-inanimate distinction in place even in youngest age group (like studies 2-3)
    • animate-inanimate distinction becomes more clear/robust with age (like studies 2-3) - but driven by INCREASE for the beetle (rather than decrease for the robot)
  • HEART:
    • like studies 2-3, substantial child vs. adult differences (children > adults), and no differentiation between target characters
    • (…but not reflected in age diffs within the child sample)
  • MIND:
    • like adults and like studies 2-3, cuts across animate-inanimate distinction
    • no age differences - C.F. study 2

General discussion

BODY
HEART
MIND
Correlations (Pearson's r)
Animacy status Age group mean sd mean sd mean sd BODY vs. HEART BODY vs. MIND HEART vs. MIND
Study 2
animate Adults 0.22 0.27 -0.33 0.27 0.19 0.24 0.38 0.69 0.42
Children, 7-9y 0.32 0.17 0.08 0.33 0.20 0.18 0.28 0.38 0.20
inanimate Adults -0.40 0.16 -0.44 0.17 0.32 0.24 0.69 0.23 0.09
Children, 7-9y -0.15 0.25 0.01 0.34 0.30 0.20 0.53 0.26 0.19
Study 3
animate Adults 0.41 0.14 -0.08 0.33 0.34 0.18 0.29 0.68 0.46
Children, 7-9y 0.34 0.15 0.04 0.28 0.16 0.24 0.39 0.36 0.16
Children, 4-6y 0.23 0.23 0.07 0.28 0.00 0.27 0.54 0.46 0.38
inanimate Adults -0.46 0.12 -0.47 0.13 -0.17 0.36 0.89 0.20 0.01
Children, 7-9y -0.31 0.20 -0.23 0.33 -0.03 0.35 0.65 0.29 0.23
Children, 4-6y -0.21 0.32 -0.18 0.31 -0.16 0.35 0.80 0.59 0.69
Study 4
animate Adults 0.27 0.28 -0.27 0.32 0.11 0.29 0.42 0.75 0.58
Children, 4-6y 0.23 0.24 -0.04 0.29 0.06 0.30 0.30 0.44 0.51
inanimate Adults -0.45 0.10 -0.45 0.14 0.12 0.31 0.63 0.24 0.23
Children, 4-6y -0.14 0.29 -0.07 0.29 0.05 0.28 0.57 0.55 0.57

XX INTRODUCE GENERAL DISCUSSION

In this final section, I aim to impart to the reader a sense of the bigger picture in the development of attributions of BODY, HEART, and MIND to animate beings and inanimate objects.

An adult endpoint

Taken together, these studies shed new light on the role of attributions of mental life in adults’ distinction between animate beings and inanimate objects. These findings are perhaps easiest to understand in terms of the visualizations of BODY, HEART, and MIND scores for animate vs. inanimate characters presented in Figures 5.8 and 5.9.

First, in the aggregate, the largest and most robust animate-inanimate distinctions among adults in these studies were in the BODY domain, for which the difference between animate vs. inanimate characters spanned at least half of the 0-1 scale across all of the studies included in this dissertation (see Figure 5.8, top row). A Bayesian regression analysis confirmed that adult participant distinguished strongly between animate vs. inanimate characters in their BODY scores (see XX main effect in Table XX); collapsing across studies this distinction was still present, but substantially diminished, in the HEART and MIND domains (see XX interactions in Table XX). Visual inspection of Figure 5.8 (top row) suggests that the difference between animate and inanimate characters in BODY scores was quite consistent across studies, while differences in HEART and MIND scores varied rather dramatically. (See also the “Robot vs. GM” and “Animate characters vs. GM” rows in Tables 5.1, 5.3, and 5.5 for differences between animate vs. inanimate characters among adults each study separately.)

Beyond this, there appear to be have been differences between animate vs. inanimate characters in the variability of adults’ BODY, HEART, and MIND attributions. In each study, adults’ attributions of to animate beings varied widely along all three dimensions: BODY, HEART, and MIND (see Figure 5.8, top row, Figure 5.9, panel C, top row, and Table 5.7 for standard deviations across study, animacy status, and domain). This variability has several possible sources, including differences in opinions or beliefs across individual participants (especially relevant for attributions to the animate “edge case”—the beetle—in Studies 1a, 1b, 1c, 2, and 4), as well as differences in the (perceived) mental capacity profiles of different animate beings (especially relevant for attributions to the “diverse characters” featured in Study 1d and Study 3). Moreover, these attributions appear to have varied in tandem (see Table 5.7 and Figure 5.9). BODY and MIND scores for animate beings were particularly strongly correlated (Pearson’s r = 0.68-0.75 across Studies 2-4), and scores for each of these more “basic” conceptual units (per Chapter IV) were also correlated quite strongly with HEART scores (BODY vs. HEART: r = 0.29-0.42; MIND vs. HEART: r = 0.42-0.58). Indeed—to pick up on a thread from the General Discussion in Chapter IV—attributions of HEART to animate beings appear to have been jointly dependent on attributions of both BODY and MIND; see Figure 5.9, panel C, in which strong HEART scores are present only among participants who received strong BODY and MIND scores—i.e., reddish points are only present in the upper right corner of the plot (and see [XX APPENDIX C?] for relevant regression analyses).

Meanwhile, adults’ attributions to inanimate objects (Figure 5.9, panel C, bottom row) varied particularly strongly in the MIND domain, but seemingly less in the domains of BODY and HEART (see also Table 5.7). Among inanimate objects, BODY and HEART scores were particularly strongly correlated (Pearson’s r = 0.63-0.89 across Studies 2-4)—but high scores in either of these two domains were quite rare. Scores for the two more “basic” conceptual units (per Chapter IV), BODY and MIND, were only weakly correlated (Pearson’s r = 0.20-0.24 across Studies 2-4), and MIND and HEART scores were virtually independent (MIND vs. HEART: r = 0.01-0.23). (See [XX APPENDIX C?] for regression analyses exploring the possibility of joint dependency of HEART on BODY and MIND among inanimate objects.)

In sum, these studies suggest that—in addition to biological properties like having blood, digesting food, growing, reproducing, and dying [XX CITE GELMAN and others]—US adults distinguish animate beings from inanimate objects by their high degree of perceived physiological sensations (BODY)—and, to a lesser degree, their superior social-emotional abilities (HEART) and perceptual cognitive abilities (MIND). Above and beyond perceiving animates vs. inanimates to differ in their “average” mental capacities, adults in these studies also appeared to conceptualize animate beings as entities who vary quite dramatically in all three aspects of mental life, and for whom these different aspects of mental life may be closely related. In contrast, in this consensus view inanimate objects appear to be seen as entities that vary mostly in their perceptual-cognitive abilities (MIND), with consistently little of the physiological sensations or social-emotional abilities of the BODY and HEART.

A developmental trajectory

XX FILL IN

Chapter conclusion

LS0tCnRpdGxlOiAiQ2hhcHRlciBWOiBDaGFuZ2VzIGluIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHQiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKYWx3YXlzX2FsbG93X2h0bWw6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQojICMgZm9yIGtuaXR0aW5nIHRvIC5kb2N4CiMgb3V0cHV0OgojICAgd29yZF9kb2N1bWVudDoKIyAgICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKYGBge3J9CiMgcnVuIHVyLXNldHVwIHNjcmlwdCAod2hpY2ggcnVucyBvdGhlciBzY3JpcHRzKQpzb3VyY2UoIi4vc2NyaXB0cy9fU0VUVVAuUiIpCgojIGxvYWQgaW4gRUZBcyAmIG5hbWVzIGZyb20gQ2hhcHRlcnMgSUlJICYgSVYKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDA0LlIiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB0aGUgdGhpcmQgb2YgbXkgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBfSG93wqBkbyBwZW9wbGUgb2YgZGlmZmVyZW50IGFnZXMgZGVwbG95IHRoZWlyIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIHRvIHJlYXNvbiBhYm91dCBzcGVjaWZpYyBlbnRpdGllcyBpbiB0aGUgd29ybGQ/XyBFdmVuIG1vcmUgdGhhbiBvdGhlciBjaGFwdGVycywgdGhpcyBxdWVzdGlvbiBjb21lcyB0byBsaWZlIG1vc3Qgdml2aWRseSBpbiB0aGUgY29udGV4dCBvZiBkZXZlbG9wbWVudGFsIGNvbXBhcmlzaW9uczsgdGhlcmVmb3JlIEkgZHJhdyBwcmltYXJpbHkgb24gZGF0YSBmcm9tIFN0dWRpZXMgMi00LCB3aGljaCBpbmNsdWRlZCBib3RoIGFkdWx0IGFuZCBjaGlsZCBzYW1wbGVzOyBzZWUgW1hYIEFQUEVORElYIEM/XSBmb3IgbW9yZSBvbiBhZHVsdHMnIHJlc3BvbnNlcyBpbiBTdHVkaWVzIDFhLTFkLiBGb3IgZGV0YWlscyBhYm91dCB0aGUgbWV0aG9kcyBvZiBhbGwgc3R1ZGllcywgc2VlIENoYXB0ZXIgSUkuIFRoZSBnb2FsIG9mIHRoaXMgY2hhcHRlciBpcyB0byBwcm92aWRlICJzbmFwc2hvdHMiIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgdG8gdmFyaW91cyB0YXJnZXQgY2hhcmFjdGVycyBpbiBlYXJseSBjaGlsZGhvb2QsIG1pZGRsZSBjaGlsZGhvb2QsIGFuZCBhZHVsdGhvb2QsIGFuZCB0byBleHBsb3JlIGluIGZpbmVyLWdyYWluZWQgZGV0YWlsIG1vcmUgY29udGludW91cyBjaGFuZ2VzIGluIGNoaWxkcmVuJ3MgYmVsaWVmcyBhYm91dCB0aGUgbWVudGFsIGxpdmVzIG9mIHRoZXNlIGNoYXJhY3RlcnMgYmV0d2VlbiA0LTl5IG9mIGFnZSwgd2l0aCBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBjaGlsZHJlbidzIGFzc2Vzc21lbnQgb2YgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGJlaW5ncy4KCgojIEdlbmVyYWwgYW5hbHlzaXMgcGxhbgoKIyMgSGlnaC1sZXZlbCBvdmVydmlldwoKSW4gYW5hbHl6aW5nIHRoZXNlIGRhdGFzZXRzIHdpdGggYW4gZXllIHRvd2FyZCBkb2N1bWVudGluZyB0aGUgYXBwbGljYXRpb24gb3IgZGVwbG95bWVudCBvZiB0aGUgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgZGVzY3JpYmVkIGluIENoYXB0ZXJzIElJSS1JViwgdGhlIGJhc2ljIGluc2lnaHQgaXMgdGhhdCB0aGUgYXR0cmlidXRpb24gb2Ygc3BlY2lmaWMgbWVudGFsIGNhcGFjaXRpZXMgdG8gc3BlY2lmaWMgdGFyZ2V0IGNoYXJhY3RlcnMgcHJvdmlkZXMgZXZpZGVuY2Ugb2YgaG93IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFyZSBkZXBsb3llZCBpbiBldmVyeWRheSBzb2NpYWwgY29nbml0aW9uLiBJbiBDaGFwdGVyIElJLCBJIGlsbHVzdHJhdGVkIHRoaXMgd2l0aCB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IElmIHBhcnRpY2lwYW50cyB3aG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBDaGFyYWN0ZXJzIDEsIDIsIGFuZCAzIHNoYXJlIG9uZSBnZW5lcmFsIHBhdHRlcm4gb2YgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgYW5kIHBhcnRpY2lwYW50cyB3aG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBDaGFyYWN0ZXJzIDQsIDUsIGFuZCA2IHNoYXJlIGFub3RoZXIgcGF0dGVybiwgdGhpcyBwcm92aWRlcyBzb21lIGV2aWRlbmNlIHRoYXQgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgbWlnaHQgcGxheSBhIHJvbGUgaW4gc3RydWN0dXJpbmcgcmVwcmVzZW50YXRpb25zIG9mIChhbmQgaW50ZXJhY3Rpb25zIHdpdGgpIGRpZmZlcmVudCBjbGFzc2VzIG9mIGJlaW5ncyBpbiB0aGUgd29ybGQuIEhlcmUgSSB3aWxsIHRyYW5zbGF0ZSB0aGlzIGdlbmVyYWwgaW50dWl0aW9uIGludG8gYSBzcGVjaWZpYyBhbmFseXNpcyBwbGFuIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBvZiB0aGVzZSBkYXRhc2V0cyBpbiB0dXJuLiAKCiMjIERldGFpbHMgb2YgYW5hbHlzZXMKCmBgYHtyfQphbmltX2xvb2t1cCA8LSBkYXRhLmZyYW1lKGNoYXJhY3RlciA9IGxldmVscyhzY29yZXNfYWxsJGNoYXJhY3RlcikpICU+JQogIG11dGF0ZShhbmltX2luYW4gPSBjYXNlX3doZW4oCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJhZHVsdCIsICJjaGlsZCIsICJpbmZhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgInBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSIsIAogICAgICAgICAgICAgICAgICAgICAicGVyc29uIGluIGEgUFZTIiwgImZldHVzIiwgImNoaW1wYW56ZWUiLCAKICAgICAgICAgICAgICAgICAgICAgImVsZXBoYW50IiwgImRvbHBoaW4iLCAiYmVhciIsICJkb2ciLCAiZ29hdCIsIAogICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZnJvZyIsICJibHVlIGpheSIsICJiaXJkIiwgImZpc2giLCAKICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJtaWNyb2JlIikgfiAiYW5pbWF0ZSIsCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJyb2JvdCIsICJjb21wdXRlciIsICJjYXIiLCAidGVkZHkgYmVhciIsIAogICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJzdGFwbGVyIikgfiAiaW5hbmltYXRlIiwKICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgIGFuaW1faW5hbiA9IGZhY3RvcihhbmltX2luYW4sIGxldmVscyA9IGMoImFuaW1hdGUiLCAiaW5hbmltYXRlIikpKQpgYGAKClhYCgojIFN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDIgc2VydmVzIHRvIHByb3ZpZGUgYW4gaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBlYXJsaWVyIGluIGRldmVsb3BtZW50LCBpbiB3aGF0IEkgaGF2ZSBjYWxsZWQgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBjaGFuZ2VzIGluIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBiZXR3ZWVuIG1pZGRsZSBjaGlsZGhvb2QgYW5kIGFkdWx0aG9vZDogSG93IGRvIFVTIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGNvbXBhcmUgdG8gdGhvc2Ugb2YgYWR1bHRzIGluIHRoZWlyIGN1bHR1cmFsIGNvbnRleHQ/CgpUbyByZXZpZXcsIGluIFN0dWR5IDIsIGByIG5yb3coZDJfYWRfd2lkZSlgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkMl83OV93aWRlKWAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKClRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMiwgSSB1c2UgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIChhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciBJVikgdG8gYW5hbHl6ZSBib3RoIGFnZSBncm91cHMuIEZvciBhbmFseXNlcyB1c2luZyBzY2FsZXMgZGVyaXZlZCBmcm9tIEVGQSBvZiBjaGlsZHJlbidzIG93biByZXNwb25zZXMsIHNlZSBbWFggQVBQRU5ESVggQz9dLgoKIyMgUmVzdWx0cwoKYGBge3J9CmQyXzc5YWRfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkMl9hZF9zY29yZWRfYWQsIGQyXzc5X3Njb3JlZF9hZCkgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkMl9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXApKQoKY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRhZ2VfZ3JvdXApIDwtIGNvbnRyYXN0c19kdW0yX2FnZWdwCmBgYAoKIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkMl83OWFkX21lYW5zIDwtIGQyXzc5YWRfc2NvcmVkX2FkICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpTZWUgRmlndXJlIDUuMiwgcGFuZWwgQSwgZm9yIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY29yZXMgZm9yIGJvdGggdGFyZ2V0IGNoYXJhY3RlcnMgYW1vbmcgdGhlIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyLgoKSW4gdGhlIGFnZ3JlZ2F0ZSwgYm90aCBjaGlsZHJlbiBhbmQgYWR1bHRzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBiZWV0bGXigJR0aGUgYW5pbWF0ZSAiZWRnZSBjYXNlIiBmZWF0dXJlZCBpbiB0aGlzIHN0dWR54oCUdG8gYmUgYSBiZWluZyB3aXRoIGEgbW9kZXJhdGVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCAiYmVldGxlIilgKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsICJiZWV0bGUiKWApLiBIb3dldmVyLCBhZHVsdHMgYW5kIGNoaWxkcmVuIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIGl0cyBhYmlsaXRpZXMgaW4gdGhlIEhFQVJUIGRvbWFpbjogV2hpbGUgYWR1bHRzIHRlbmRlZCB0byBncmFudCB2ZXJ5IGxpdHRsZSBpbiB0aGUgd2F5IG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgImJlZXRsZSIpYCksIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsICJiZWV0bGUiKWApLgoKRm9yIHRoZSByb2JvdOKAlHRoZSBpbmFuaW1hdGUgImVkZ2UgY2FzZSIgZmVhdHVyZWQgaW4gdGhpcyBzdHVkeeKAlGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgaW5kaWNhdGVkIGEgaGlnaCBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsICJyb2JvdCIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWApLCBhbmQgYXBwZWFyZWQgdG8gYWdyZWUgdGhhdCB0aGUgcm9ib3QgaGFkIGxlc3MgaW4gdGhlIHdheSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYW4gdGhlIGJlZXRsZS4gSG93ZXZlciwgdGhlIHR3byBhZ2UgZ3JvdXBzIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIHRoZSBhYnNvbHV0ZSBkZWdyZWUgb2YgQk9EWSBhbmQgSEVBUlQgdGhhdCB0aGV5IHdlcmUgd2lsbGluZyB0byBncmFudCB0aGUgcm9ib3Q6IEFkdWx0cyBncmFudGVkIHZlcnkgbGl0dGxlIGluIGVpdGhlciBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJyb2JvdCIpYCksIHdoaWxlIGNoaWxkcmVuIGdyYW50ZWQgbWlkZGxpbmcgYWJpbGl0aWVzIGluIGJvdGggZG9tYWlucyAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWApLgoKYGBge3J9CmZpZ3VyZTUuMl9wbG90cyA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90X2FnZSgKICBkZl9zY29yZWQgPSBmdWxsX2pvaW4oZDJfYWRfc2NvcmVkX2FkLCBkMl83OV9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA3LTl5IiwgIkFkdWx0cyIpLAogIHBsb3RfbWFyZ191cHBlciA9IC00NSwgYXhpc19oZWlnaHQgPSAwLjA5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjJfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS4yX3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuMjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyBjaGlsZHJlbiAoNy05eSkgYW5kIGFkdWx0cyBpbiBTdHVkeSAyLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGFuZCAoQikgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgOTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuMl9wbG90c19jYXApCmBgYAoKYGBge3J9CmQyXzc5YWRfbnRpbGVzIDwtIGQyXzc5YWRfc2NvcmVkX2FkICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yKSAlPiUKICBtdXRhdGUoYmluID0gY3V0KHNjb3JlLCAxMyksCiAgICAgICAgIGJpbl9udW0gPSBhcy5udW1lcmljKGZhY3RvcihiaW4pKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGNvdW50KGFnZV9ncm91cCwgZmFjdG9yLCBiaW4sIGJpbl9udW0pICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKQpkMl83OWFkX250aWxlcwpgYGAKCmBgYHtyfQojIHJfZDJfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDJfZGV2Z3BfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfQk9EWSIpCgpyX2QyX2RldmdwX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9CT0RZIikKCnN1bW1hcnkocl9kMl9kZXZncF9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2Z3BfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZncF9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfSEVBUlQiKQoKcl9kMl9kZXZncF9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0hFQVJUIikKCnN1bW1hcnkocl9kMl9kZXZncF9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX01JTkQiKQoKcl9kMl9kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QyX2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2QyX2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDJfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2QyX2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9jaGlsZCIpLCAKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4gdnMuIGFkdWx0cyIpKQpgYGAKCmBgYHtyfQp0YWJsZTUuMSA8LSBkZXZncF90YWJsZV9mdW4ocmVndGFiX2RldmdwID0gcmVndGFiX2QyX2RldmdwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fYWdlX2dyb3VwcyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQmVldGxlIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuMQpgYGAKCkEgc2VyaWVzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgY29uZmlybWVkIHRoZXNlIGdlbmVyYWwgaW1wcmVzc2lvbnMuIENoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4xLCAiQ2hpbGRyZW4gdnMuIGFkdWx0cyIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLCBwYXJ0aWN1bGFybHkgZm9yIHRoZSByb2JvdCAoc2VlIEZpZ3VyZSA1LjIsIHRvcCByb3cpOyBhcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3Qgd2FzIGF0dGVudWF0ZWQgYW1vbmcgY2hpbGRyZW4sIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMSwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIENoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjEsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS4yLCBtaWRkbGUgcm93KSwgYnV0IHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgc3Vic3RhbnRpYWxseSBhY3Jvc3MgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjEsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBUaGVyZSB3ZXJlIG5vIHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiB0aGVpciBfTUlORF8gc2NvcmVzIChzZWUgVGFibGUgNS4xIGFuZCBGaWd1cmUgNS4yLCBib3R0b20gcm93KS4KClRha2VuIHRvZ2V0aGVyLCB0aGVzZSBvYnNlcnZhdGlvbnMgaGlnaGxpZ2h0IG9uZSBlc3BlY2lhbGx5IHN0cmlraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzOiBGb3IgYm90aCBlZGdlIGNhc2VzLCByZWdhcmRsZXNzIG9mIGFuaW1hY3kgc3RhdHVzLCBjaGlsZHJlbiBhdHRyaWJ1dGVkIHN1YnN0YW50aWFsbHkgbW9yZSBIRUFSVCB0aGFuIGRpZCBhZHVsdHMuIEluZGVlZCwgZnVsbHkgYHIgcm91bmQoKGQyXzc5YWRfbnRpbGVzICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiLCBmYWN0b3IgPT0gIkhFQVJUIiwgYmluX251bSA9PSAxKSkkcHJvcCwgMikqMTAwYCUgb2YgYWR1bHRzIGluIFN0dWR5IDIgaGFkIF9IRUFSVF8gc2NvcmVzIDwgYHIgZ3N1YigiXi4qLCIsICIiLCAoZDJfNzlhZF9udGlsZXMgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIsIGZhY3RvciA9PSAiSEVBUlQiLCBiaW5fbnVtID09IDEpKSRiaW4pICU+JSBnc3ViKCJcXF0iLCAiIiwgLikgJT4lIGFzLm51bWVyaWMoKSAlPiUgY2VpbGluZ19kZWMoMilgIChpLmUuLCBhbnN3ZXJlZCBhdCBtb3N0IF9vbmVfIG9mIHRoZSA2IF9IRUFSVF8gaXRlbXMgd2l0aCBhIHJlc3BvbnNlIG9mICJLSU5EQSwiIGFuZCBvdGhlcndpc2UgYW5zd2VyZWQgIk5PIiB0byBhbGwgX0hFQVJUXyBpdGVtcykuIFRoZSBtb3JlIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgYWNyb3NzIHRoZSAwLTEgcmFuZ2Ugc3RhbmRzIGluIHN0YXJrIGNvbnRyYXN0IHRvIHRoaXMgYWR1bHQgc3RhbmRhcmQ7IHNlZSBGaWd1cmUgNS4yLCBwYW5lbCBCLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNy05eQoKSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIEkgY29tcGFyZWQgdGhlIGF0dHJpYnV0aW9ucyBvZiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFzIGEgZ3JvdXAgdG8gdGhvc2Ugb2YgYWR1bHRzLiBIZXJlLCBJIGV4cGxvcmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGU6IEhvdyBtaWdodCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBjaGFuZ2Ugb3ZlciB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHk/IAoKSWYgdGhlIHNuYXBzaG90cyBvZiBjaGlsZHJlbiB2cy4gYWR1bHRzIGFyZSByZWZsZWN0aXZlIG9mIF9kZXZlbG9wbWVudGFsXyBjaGFuZ2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoaXMgd291bGQgbWVhbiB0aGF0IGFnZSB3b3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggbG93ZXIgX0JPRFlfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3Q7IGFuZCB3aXRoIGxvd2VyIF9IRUFSVF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzLgoKYGBge3J9CnBsb3RzX2QyX2RldiA8LSBjaGFyYWN0ZXJfZGV2cGxvdChkZl9zY29yZWRfYWQgPSBkMl9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfc2NvcmVkX2NoID0gZDJfNzlfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX2FnZSA9IGQyXzc5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjMgPC0gcGxvdHNfZDJfZGV2ICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IikKYGBgCgpgYGB7cn0KZmlndXJlNS4zX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuMywgc3RyX3dyYXAoIkZpZ3VyZSA1LjM6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjV9CmdnZHJhdyhmaWd1cmU1LjNfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQpkMl83OWFnZV9zY29yZWRfYWQgPC0gZDJfNzlfc2NvcmVkX2FkICU+JQogIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkMl9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkMl83OWFnZV9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQyXzc5YWdlX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDJfNzlhZ2Vfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0JPRFkiKQoKcl9kMl9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFnZV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9IRUFSVCIpCgpyX2QyX2RldnNjb3JlX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfSEVBUlQiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX01JTkQiKQoKcl9kMl9kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QyX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QyX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDJfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kMl9kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuMiA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QyX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkMl83OSRhZ2UsIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjIKYGBgCgpJbiBmYWN0LCB0aGlzIGlzIGV4YWN0bHkgd2hhdCBJIG9ic2VydmUgYW1vbmcgdGhlIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeS4gCgpJbiBsaW5lIHdpdGggYW4gYWR1bHQtbGlrZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiwgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXIpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyOyBzZWUgVGFibGUgNS4yLCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBXaXRoIGFnZSwgaG93ZXZlciwgY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzIGdlbmVyYWxseSBkZWNyZWFzZWQgKGFuZCBUYWJsZSA1LjIsICJFeGFjdCBhZ2UiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKSwgZHJpdmVuIGJ5IGNoYW5nZXMgaW4gY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSB0byB0aGUgcm9ib3QuIEFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCBpbmNyZWFzZWQgb3ZlciB0aGUgYWdlIHJhbmdlIChzZWUgVGFibGUgNS4yLCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgbGVmdG1vc3QgcGxvdCkuCgpNZWFud2hpbGUsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgZGlkIG5vdCBkaWZmZXIgcmVsaWFibHkgYWNyb3NzIHRoZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhpcyBzdHVkeSAoc2VlIFRhYmxlIDUuMiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbinigJRidXQgd2l0aCBhZ2UsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgZm9yIGJvdGggY2hhcmFjdGVycyBnZW5lcmFsbHkgZGVjcmVhc2VkIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgY2VudGVyIHBsb3QpLgoKRmluYWxseSwgX01JTkRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyKSB0aGFuIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgYmVldGxlICh0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyOyBzZWUgVGFibGUgNS4yLCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgTUlORCBkb21haW4pLiBJbiBhZGRpdGlvbiB0byB0aGUgcHJlZGljdGVkIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIHRoZSBCT0RZIGFuZCBIRUFSVCBkb21haW5zLCBjaGlsZHJlbidzIF9NSU5EXyBzY29yZXMgZm9yIGJvdGggY2hhcmFjdGVycyBnZW5lcmFsbHkgaW5jcmVhc2VkIHdpdGggYWdlIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgTUlORCBkb21haW4sIGFuZCBGaWd1cmUgNS4zLCByaWdodG1vc3QgcGxvdCkuCgojIyBEaXNjdXNzaW9uCgpYWCBfX0lOU0VSVCBESVNDVVNTSU9OX18KCk9VVExJTkU6CgphZHVsdHM6IAoKICAtIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIHN0cm9uZ2VzdCBpbiB0aGUgQk9EWSBkb21haW4KICAtIG5laXRoZXIgZWRnZSBjYXNlIGdyYW50ZWQgbXVjaCBIRUFSVAogIC0gYm90aCBlZGdlIGNhc2VzIGdyYW50ZWQgZmFpciBhbW91bnQgb2YgTUlORAoKY2hpbGRyZW46CgotIEJPRFk6IAogICAgLSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBpbiBwbGFjZQogICAgLSBidXQgZ2VuZXJhbCBkZWNyZWFzZXMsIGVzcGVjaWFsbHkgZm9yIHRoZSByb2JvdCAoYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gYmVjb21lcyBtb3JlIGNsZWFyL3JvYnVzdCkKLSBIRUFSVDogYmlnZ2VzdCBhZ2UgZGlmZmVyZW5jZXMKICAgIC0gYm90aCBlZGdlIGNhc2VzIGdyYW50ZWQgZmFpciBhbW91bnQgb2YgSEVBUlQKICAgIC0gYm90aCBtb3JlIHRoYW4gYWR1bHRzCiAgICAtIGRlY3JlYXNlcyB3aXRoIGFnZQotIE1JTkQ6IAogICAgLSBib3RoIGVkZ2UgY2FzZXMgZ3JhbnRlZCBmYWlyIGFtb3VudCBvZiBNSU5ECiAgICAtIGluY3JlYXNlcyB3aXRoIGFnZSAodGhvdWdoIG5vIHJlbGlhYmxlIGdyb3VwIGRpZmZlcmVuY2VzKQoKCiMgU3R1ZHkgMzogQ29uY2VwdHVhbCBjaGFuZ2Ugb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNC05eSkKClN0dWR5IDMgYnVpbGRzIG9uIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpIGluaXRpYXRlZCBpbiBTdHVkeSAyIGFuZCBleHRlbmRzIHRoaXMgZXhwbG9yYXRpb24gb2YgY29uY2VwdHVhbCBjaGFuZ2UgaW50byBlYXJsaWVyIGNoaWxkaG9vZCAoNC02eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBjaGFuZ2VzIGluIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdOKAlGkuZS4sIHRoZSBhdHRyaWJ1dGlvbiBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgdG8gdmFyaW91cyBiZWluZ3MgaW4gdGhlIHdvcmxk4oCUb3ZlciB0aGUgY291cnNlIG9mIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kICg3LTl5KS4KClRvIHJldmlldywgaW4gU3R1ZHkgMywgYHIgbnJvdyhkM19hZF93aWRlKWAgVVMgYWR1bHRzLCBgciBucm93KGQzXzc5X3dpZGUpYCAib2xkZXIiIGNoaWxkcmVuIChgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzOyBtZWRpYW46IGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSksIGFuZCBgciBucm93KGQzXzQ2X3dpZGUpYCAieW91bmdlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gMjAgbWVudGFsIGNhcGFjaXRpZXMuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IG9yIHBzZXVkby1yYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3Mgb25lIG9mIHRoZSBmb2xsb3dpbmcgOSBjaGFyYWN0ZXJzOiBhbiBlbGVwaGFudCwgYSBnb2F0LCBhIG1vdXNlLCBhIGJpcmQsIGEgYmVldGxlLCBhIHRlZGR5IGJlYXIsIGEgZG9sbCwgYSByb2JvdCwgb3IgYSBjb21wdXRlci4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZHkgMiwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGJldHdlZW4gdGhlIHRocmVlIGFnZSBncm91cHMgaW5jbHVkZWQgaW4gU3R1ZHkgMywgSSB1c2UgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIChhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciBJVikgdG8gYW5hbHl6ZSBib3RoIGFnZSBncm91cHMuIEZvciBhbmFseXNlcyB1c2luZyBzY2FsZXMgZGVyaXZlZCBmcm9tIEVGQSBvZiBjaGlsZHJlbidzIG93biByZXNwb25zZXMsIHNlZSBbWFggQVBQRU5ESVggQz9dLgoKIyMgUmVzdWx0cwoKYGBge3J9CmQzXzQ2NzlhZF9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQzX2FkX3Njb3JlZF9hZCwgZDNfNzlfc2NvcmVkX2FkKSAlPiUKICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQzX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCkpCgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KY29udHJhc3RzKGQzXzQ2NzlhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtM19hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDNfNDY3OWFkX21lYW5zIDwtIGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBhbmltX2luYW4sIGZhY3RvcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKQpgYGAKClNlZSBGaWd1cmUgNS40LCBwYW5lbCBBLCBmb3IgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjb3JlcyBmb3IgZWFjaCBvZiB0aGUgbmluZSB0YXJnZXQgY2hhcmFjdGVycyBhbW9uZyB0aGUgeW91bmdlciBjaGlsZHJlbiAoNC02eSksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSwgYW5kIGFkdWx0cyBpbiBTdHVkeSAzLCBhbmQgRmlndXJlIDUuNCwgcGFuZWwgQiwgZm9yIGEgdmlzdWFsaXphdGlvbiBvZiBzY29yZXMgd2l0aCB0YXJnZXQgY2hhcmFjdGVycyBncm91cGVkIGludG8gYW5pbWF0ZSBiZWluZ3MgKGVsZXBoYW50LCBnb2F0LCBtb3VzZSwgYmlyZCBiZWV0bGUpIHZzLiBpbmFuaW1hdGUgb2JqZWN0cyAodGVkZHkgYmVhciwgZG9sbCwgcm9ib3QsIGNvbXB1dGVyKS4gVG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIHdpdGggU3R1ZGllcyAyIGFuZCA0LCBJIHdpbGwgZm9jdXMgaGVyZSBvbiBhbmltYWN5IHN0YXR1cywgcmF0aGVyIHRoYW4gYW5hbHp5aW5nIGFsbCB0YXJnZXQgY2hhcmFjdGVycyBpbmRpdmlkdWFsbHkuCgpJbiB0aGUgYWdncmVnYXRlLCBhbGwgdGhyZWUgYWdlIGdyb3VwcyBzZWVtIHRvIGhhdmUgY29uc2lkZXJlZCB0aGUgYW5pbWF0ZSBiZWluZ3MgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSB0byBoYXZlIGEgcmVsYXRpdmVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIHlvdW5nZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCksIGFuZCBhIG1pZGRsaW5nIGRlZ3JlZSBvZiBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAobWVhbiBfSEVBUlRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgOyBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCkuIEFzc2Vzc21lbnRzIG9mIGFuaW1hdGUgYmVpbmdzJyBhYmlsaXRpZXMgaW4gdGhlIE1JTkQgZG9tYWluIGFwcGVhciB0byBoYXZlIHZhcmllZCBtb3JlIGJ5IGFnZSBncm91cDogV2hpbGUgYWR1bHRzIHRlbmRlZCB0byBncmFudCBhbmltYXRlIGJlaW5ncyBhIGhpZ2ggZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCksIHlvdW5nZXIgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIHRlbmRlZCB0byBob3ZlciBhcm91bmQgdGhlIG1pZHBvaW50IG9mIHRoZSBzY2FsZSAobWVhbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgd2l0aCBvbGRlciBjaGlsZHJlbiBmYWxsaW5nIGluIGJldHdlZW4gKG1lYW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCkuCgpGb3IgdGhlIGluYW5pbWF0ZSBiZWluZ3MgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSwgdGhlcmUgd2FzIGEgaGlnaCBkZWdyZWUgb2YgY29uc2Vuc3VzIGFtb25nIGFkdWx0cyB0aGF0IHN1Y2ggZW50aXRpZXMgaGFkIHZpcnR1YWxseSBubyBwaHlzaW9sb2dpY2FsIG9yIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9CT0RZXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkuIEluIGNvbnRyYXN0LCBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgZ3JhbnRlZCBsb3cgdG8gbW9kZXJhdGUgYWJpbGl0aWVzIHRvIGluYW5pbWF0ZSBiZWluZ3MgaW4gYm90aCB0aGUgQk9EWSBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWApIGFuZCB0aGUgSEVBUlQgZG9tYWluIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4gQWxsIHRocmVlIGFnZSBncm91cHMsIGluIHRoZSBhZ2dyZWdhdGUsIGdyYW50ZWQgbWlkZGxpbmcgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRvIHRoZXNlIGluYW5pbWF0ZSBjaGFyYWN0ZXJzICh3aGljaCBpbmNsdWRlZCB0d28gImludGVsbGlnZW50IiB0ZWNobm9sb2dpZXM7IG1lYW4gX01JTkRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkuCgpgYGB7cn0KZmlndXJlNS40X3Bsb3RzIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3RfYWdlKAogIGRmX3Njb3JlZCA9IGZ1bGxfam9pbihkM19hZF9zY29yZWRfYWQsIGQzXzQ2X3Njb3JlZF9hZCkgJT4lCiAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkKSwgCiAgc2hvd19hbmltX2J5X3N1YmogPSBULAogIGFnZV9sZXZlbHMgPSBjKCJjaGlsZHJlbjQ2IiwgImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA0LTZ5IiwgIkNoaWxkcmVuLCA3LTl5IiwgIkFkdWx0cyIpLAogIGppdHRlcl93aWQgPSAxLjUsCiAgcGxvdF9tYXJnX3VwcGVyID0gLTcwLCBheGlzX2hlaWdodCA9IDAuMTEpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNF9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjRfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS40OiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpLCBvbGRlciBjaGlsZHJlbiAoNy05eSksIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMy4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgKEEpIHNjb3JlcyBieSB0YXJnZXQgY2hhcmFjdGVyLCAoQikgYW5pbWFjeSBzdGF0dXMsIGFuZCAoQykgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMjMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMC40fQpnZ2RyYXcoZmlndXJlNS40X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KIyByX2QzX2RldmdwX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2Z3BfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfQk9EWSIpCgpyX2QzX2RldmdwX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9CT0RZIikKCnN1bW1hcnkocl9kM19kZXZncF9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9IRUFSVCIpCgpyX2QzX2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2QzX2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZncF9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9NSU5EIikKCnJfZDNfZGV2Z3BfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX01JTkQiKQoKc3VtbWFyeShyX2QzX2RldmdwX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kM19kZXZncCA8LSByZWd0YWJfZGV2Z3BfZnVuKAogIHJlZ19ib2R5ID0gcl9kM19kZXZncF9CT0RZLCAKICByZWdfaGVhcnQgPSByX2QzX2RldmdwX0hFQVJULAogIHJlZ19taW5kID0gcl9kM19kZXZncF9NSU5ELAogIGFnZV9sZXZlbHMgPSBjKCJhZ2VfZ3JvdXBfb2xkIiwgImFnZV9ncm91cF95bmciKSwgCiAgYWdlX2xhYmVscyA9IGMoIk9sZGVyIGNoaWxkcmVuICg3LTl5KSB2cy4gYWR1bHRzIiwKICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiAoNC02eSkgdnMuIGFkdWx0cyIpKQpgYGAKCmBgYHtyfQp0YWJsZTUuMyA8LSBkZXZncF90YWJsZV9mdW4ocmVndGFiX2RldmdwID0gcmVndGFiX2QzX2RldmdwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQW5pbWF0ZSBjaGFyYWN0ZXJzIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuMwpgYGAKCkEgc2VyaWVzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgY29uZmlybWVkIHRoZXNlIGdlbmVyYWwgaW1wcmVzc2lvbnMgb2YgZGlmZmVyZW5jZXMgYWNyb3NzIGFnZSBncm91cHMuIAoKTmVpdGhlciBvbGRlciBub3IgeW91bmdlciBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMywgIk9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIGFuZCAiWW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiByb3dzIGZvciB0aGUgQk9EWSBkb21haW4pLCBidXQgaW4gYm90aCBncm91cHMgb2YgY2hpbGRyZW4gdGhlIGRpZmZlcmVuY2UgaW4gX0JPRFlfIHNjb3JlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHdhcyBhdHRlbnVhdGVkLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBNZWFud2hpbGUsIGluIHRoZSBfSEVBUlRfIGRvbWFpbiwgYm90aCBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjMsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS40LCBtaWRkbGUgcm93KSwgYnV0IHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgc3Vic3RhbnRpYWxseSBhY3Jvc3MgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBGaW5hbGx5LCBpbiB0aGUgX01JTkRfIGRvbWFpbiwgeW91bmdlciBjaGlsZHJlbidzIChidXQgbm90IG9sZGVyIGNoaWxkcmVuJ3MpIF9NSU5EXyBzY29yZXMgd2VyZSBzdWJzdGFudGlhbGx5IGxvd2VyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMywgIk9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIGFuZCAiWW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiByb3dzIGZvciB0aGUgTUlORCBkb21haW4pLiBJbiBhZGRpdGlvbiwgaW4gYm90aCBncm91cHMgb2YgY2hpbGRyZW4gdGhlIGRpZmZlcmVuY2UgaW4gX01JTkRfIHNjb3JlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHdhcyBhdHRlbnVhdGVkLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgTUlORCBkb21haW4pLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNC05eQoKSGVyZSwgSSBzaGlmdCBmcm9tIHRoZSAic25hcHNob3QiIGFnZSBncm9wdSBjb21wYXJpc29ucyBvZiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0byBhbiBleGFtaW5hdGlvbiBvZiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIHRvIHRoZXNlIHRhcmdldCBjaGFyYWN0ZXJzIGNoYW5nZSBiZXR3ZWVuIDQtOXkgb2YgYWdlPyAKCkFzIEkgYXJndWVkIGZvciBTdHVkeSAyLCBpZiB0aGUgYWdlIGdyb3VwIGRpZmZlcmVuY2VzIGp1c3QgZGVzY3JpYmVkIHJlZmxlY3QgX2RldmVsb3BtZW50YWxfIGRpZmZlcmVuY2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEluIHRoaXMgY2FzZSwgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYWdlIHdvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgZGlmZmVyZW50YXRpb24gb2YgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzOyBsb3dlciBfSEVBUlRfIHNjb3JlcyAocmVnYXJkbGVzcyBvZiB0YXJnZXQgY2hhcmFjdGVyKTsgYW5kIGhpZ2hlciBfTUlORF8gc2NvcmVzLCBwYXJ0aWN1bGFybHkgZm9yIGFuaW1hdGUgYmVpbmdzLgoKYGBge3J9CnBsb3RzX2QzX2Rldl9jaGFyIDwtIGNoYXJhY3Rlcl9kZXZwbG90KAogIGRmX3Njb3JlZF9hZCA9IGQzX2FkX3Njb3JlZF9hZCwgCiAgZGZfc2NvcmVkX2NoID0gZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSwgCiAgZGZfYWdlID0gZnVsbF9qb2luKGQzXzc5ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSkKYGBgCgpgYGB7cn0KcGxvdHNfZDNfZGV2X2FuaW0gPC0gY2hhcmFjdGVyX2RldnBsb3QoCiAgZGZfc2NvcmVkX2FkID0gZDNfYWRfc2NvcmVkX2FkICU+JQogICAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBhbmltX2luYW4pLCAKICBkZl9zY29yZWRfY2ggPSBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2X3Njb3JlZF9hZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpICU+JQogICAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBhbmltX2luYW4pLCAKICBkZl9hZ2UgPSBmdWxsX2pvaW4oZDNfNzkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICBkM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjVfY2hhciA8LSBwbG90c19kM19kZXZfY2hhciArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC05eSAoYnkgdGFyZ2V0IGNoYXJhY3RlcikiKQoKZmlndXJlNS41X2FuaW0gPC0gcGxvdHNfZDNfZGV2X2FuaW0gKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtOXkgKGJ5IGFuaW1hY3kgc3RhdHVzKSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKCJBbmltYWN5IHN0YXR1cyIsIHZhbHVlcyA9IGNvbG9yc0FJLAogICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpKQoKZmlndXJlNS41X3Bsb3RzIDwtIHBsb3RfZ3JpZChmaWd1cmU1LjVfY2hhciwgZmlndXJlNS41X2FuaW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCBsYWJlbHMgPSAiQVVUTyIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS41OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMX0KZ2dkcmF3KGZpZ3VyZTUuNV9wbG90c19jYXApCmBgYAoKYGBge3J9CmQzXzQ2Nzlfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihkM183OSAlPiUgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkM19hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkM180Njc5X3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQzXzQ2Nzlfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IGNoYXJhY3RlciksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2c2NvcmVfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfQk9EWSIpCgpyX2QzX2RldnNjb3JlX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9CT0RZIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfSEVBUlQiKQoKcl9kM19kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzX2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX01JTkQiKQoKcl9kM19kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QzX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDNfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kM19kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuNCA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QzX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkM180Njc5X3Njb3JlZF9hZCRhZ2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjQKYGBgCgpTb21lLCBidXQgbm90IGFsbCwgb2YgdGhlc2UgcHJlZGljdGlvbnMgd2VyZSBib3JuIG91dCBhbW9uZyB0aGUgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiB0aGlzIHN0dWR5LiAKCkFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIHRoZSBCT0RZIGRvbWFpbiBjb25mb3JtZWQgdG8gdGhlIGRldmVsb3BtZW50YWwgc3Rvcnkgc3VnZ2VzdGVkIGJ5IHRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbjogX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXI7IHNlZSBUYWJsZSA1LjQsICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGFuZCB0aGlzIGRpZmZlcmVuY2UgaW5jcmVhc2VkIHdpdGggYWdlIChzZWUgVGFibGUgNS40LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuNSwgcGFuZWwgQiwgbGVmdG1vc3QgcGxvdCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZ2VuZXJhbCB0cmVuZHMgaGVsZCB0cnVlIGZvciBhbGwgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzLiBBIHJlZ3Jlc3Npb24gYW5hbHlzaXMgZGlkIG5vIHJldmVhbCBhbnkgcmVsaWFibGUgb3ZlcmFsbCBkaWZmZXJlbmNlcyBpbiBfQk9EWV8gc2NvcmVzIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuNCwgIkV4YWN0IGFnZSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiAKClRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBzdWdnZXN0ZWQgdGhhdCBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgc2hvdWxkIGRlY3JlYXNlIHdpdGggYWdlLiBJIGRpZCBub3Qgb2JzZXJ2ZSBldmlkZW5jZSBvZiB0aGlzIHdpdGhpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gQXMgaW4gdGhlIEJPRFkgZG9tYWluLCBfSEVBUlRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoc2VlIFRhYmxlIDUuNCwgIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbiksIGJ1dCB0aGVyZSB3ZXJlIG5vIHJlbGlhYmxlIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuNCwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIEhFQVJUIGRvbWFpbiwsIGFuZCBGaWd1cmUgNS41LCBwYW5lbCBCLCBjZW50ZXIgcGxvdCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhpcyBtYXkgcmVmbGVjdCB2YXJpYWJpbGl0eSBhY3Jvc3Mgc3BlY2lmaWMgdGFyZ2V0IGNoYXJhY3RlcnM6IEZvciBzb21lIGNoYXJhY3RlcnMgKG1vc3Qgbm90YWJseSwgdGhlIHJvYm90KSBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgYXBwZWFyZWQgdG8gaW5jcmVhc2Ugb3ZlciB0aGlzIGFnZSByYW5nZSAoNC05eSksIHdoaWxlIGZvciBvdGhlciBjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHksIHRoZSBiZWV0bGUsIHRoZSBkb2xsLCBhbmQgdGhlIGNvbXB1dGVyKSBhdHRyaWJ1dGlvbnMgYXBwZWFyZWQgdG8gZGVjcmVhc2U7IGZvciBtYW55IG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5IHRoZXJlIGFwcGVhcmVkIHRvIGJlIG5vIHN5c3RlbWF0aWMgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gYXR0cmlidXRpb25zIG9mIEhFQVJULgoKRmluYWxseSwgaW4gbGluZSB3aXRoIHRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgX01JTkRfIHNjb3JlcyBnZW5lcmFsbHkgaW5jcmVhc2VkIHdpdGggYWdlIChzZWUgVGFibGUgNS40LCAiRXhhY3QgYWdlIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbikuIEFzIGluIHRoZSBCT0RZIGFuZCBNSU5EIGRvbWFpbnMsIF9NSU5EXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgdGhhbiBhbW9uZyB0aG9zZSB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjQsICJCZWV0bGUgdnMuIEdNIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbinigJRidXQgYWx0aG91Z2ggZ3JvdXAgZGlmZmVyZW5jZXMgc3VnZ2VzdGVkIHRoYXQgdGhpcyBkaWZmZXJlbmNlIHNob3VsZCBpbmNyZWFzZSB3aXRoIGFnZSwgdGhlcmUgd2FzIG5vIGV2aWRlbmNlIGZvciB0aGlzIGludGVyYWN0aW9uIGFtb25nIGNoaWxkcmVuIChzZWUgVGFibGUgNS40LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluLCBhbmQgRmlndXJlIDUuNSwgcGFuZWwgQiwgcmlnaHRtb3N0IHBsb3QpLiBIb3dldmVyLCB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNS41LCBwYW5lbCBBLCBzdWdnZXN0cyB0aGF0IHRoZXJlIHdlcmUgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIGZvciB3aG9tIGF0dHJpYnV0aW9ucyBvZiBNSU5EIGRpZCBfTk9UXyBpbmNyZWFzZSB3aXRoIGFnZTogbmFtZWx5LCB0aGUgdHdvIGluZXJ0IHRveXMgKHRoZSB0ZWRkeSBiZWFyIGFuZCB0aGUgZG9sbCkuIEludGVyZXN0aW5nbHksIHRoaXMgcGxvdCBzdWdnZXN0cyB0aGF0IHRoZSB0d28gdGVjaG5vbG9naWVzICh0aGUgcm9ib3QgYW5kIHRoZSBjb21wdXRlcikgYXBwZWFyIHRvIGJlIGFtb25nIHRoZSBjaGFyYWN0ZXJzIGZvciB3aG9tIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIE1JTkQgbWF5IGhhdmUgYmVlbiBtb3N0IGRyYW1hdGlj4oCUYnV0IHRoaXMgZ2VuZXJhbCB0cmVuZCBvZiBpbmNyZWFzaW5nIGF0dHJpYnV0aW9ucyBvZiBNSU5EIGFsc28gYXBwZWFycyB0byBoYXZlIGFwcGxpZWQgdG8gYWxsIG9mIHRoZSBhbmltYXRlIGNoYXJhY3RlcnMuCgojIyBEaXNjdXNzaW9uCgpYWCBfX0lOU0VSVCBESVNDVVNTSU9OX18KCk9VVExJTkU6CgphZHVsdHM6IAogIC0gbGlrZSBzdHVkeSAyLCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBzdHJvbmdlc3QgaW4gdGhlIEJPRFkgZG9tYWluCiAgLSBsaWtlIHN0dWR5IDIsIG1vc3QgYmVpbmdzIG5vdCBncmFudGVkIG11Y2ggSEVBUlQ6IHZhcmlhYmxlIGFtb25nIHRoZSBhbmltYXRlIGJlaW5ncyAoYW5kIHZlcnkgbGl0dGxlIGFtb25nIGluYW5pbWF0ZXMpIC0gaGFya2VucyBiYWNrIHRvIGNoMDQKICAtIGFsbCBhbmltYXRlcyBncmFudGVkIE1JTkTigJRhbmQgc29tZSBpbmFuaW1hdGVzICh0ZWNobm9sb2dpZXMsIGxpa2Ugc3R1ZHkgMikKCmNoaWxkcmVuOgoKLSBCT0RZOiAKICAgIC0gYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gaW4gcGxhY2UgZXZlbiBpbiB5b3VuZ2VyIGFnZSBncm91cCB0aGFuIHN0dWR5IDIKICAgIC0gYnV0IGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGJlY29tZXMgbW9yZSBjbGVhci9yb2J1c3Qgd2l0aCBhZ2UKLSBIRUFSVDogCiAgICAtIGxpa2Ugc3R1ZHkgMiwgc3Vic3RhbnRpYWwgY2hpbGQgdnMuIGFkdWx0IGRpZmZlcmVuY2VzIChjaGlsZHJlbiA+IGFkdWx0cykuLi4KICAgIC0gLi4uYnV0IE5PVCByZWZsZWN0ZWQgaW4gYWdlIGRpZmZzIHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlcyEKICAgIC0gZXNwZWNpYWxseSBwZXJzaXN0YW50OiBvdmVyLWF0dHJpYnV0aW9ucyB0byBtb3VzZSAoPyksIHJvYm90IChpbmNyZWFzaW5nISkKICAgIC0gbWF5YmUgSEVBUlQgZGlmZnMgYXJlIG5vdCBfZGV2ZWxvcG1lbnRhbF8gZGlmZmVyZW5jZXM/Ci0gTUlORDogCiAgICAtIG1vcmUgc3Ryb25nbHkgdGhhbiBzdHVkeSAyLCBkcmFtYXRpYyBpbmNyZWFzZXMgd2l0aCBhZ2UKICAgIC0gbGlrZSBhZHVsdHMgYW5kIGxpa2Ugc3R1ZHkgMiwgY3V0cyBhY3Jvc3MgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24KICAgIAoKIyBTdHVkeSA0OiBBIGZvY3VzIG9uIGVhcmx5IGNoaWxkaG9vZCAoNC01eSkKClN0dWR5IDQgYnVpbGRzIG9uIFN0dWR5IDMgYnkgcHJvdmlkaW5nIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gdGhlIHByZXNjaG9vbCB5ZWFycyAoNC01eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiBkZXZlbG9wbWVudCB0aGF0IEkgaGF2ZSBleGFtaW5lZCBzbyBmYXIsIGFuZCBjb21wYXJlIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBhbW9uZyB5b3VuZyBjaGlsZHJlbiB2cy4gYWR1bHRzLiAKClRvIHJldmlldywgaW4gU3R1ZHkgNCwgYHIgbnJvdyhkNF9hZF93aWRlKS8yYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDRfNDZfd2lkZSkvMmAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gMTggbWVudGFsIGNhcGFjaXRpZXMsIHdpdGggYWxsIGFzcGVjdHMgb2YgdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24gdGFpbG9yZWQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgeW91bmdlc3QgYWdlIGdyb3VwLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyBhc3Nlc3NpbmcgYm90aCBhIGJlZXRsZSBvciBhIHJvYm90IGluIHNlcXVlbmNlICh3aXRoIG9yZGVyIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZGllcyAyIGFuZCAzLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDQsIEkgdXNlIGFkdWx0cycgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyAoYXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSVYpIHRvIGFuYWx5emUgYm90aCBhZ2UgZ3JvdXBzLiBGb3IgYW5hbHlzZXMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCBzZWUgW1hYIEFQUEVORElYIEM/XS4KCiMjIFJlc3VsdHMKCmBgYHtyfQpkNF80NmFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtMl9hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDRfNDZhZF9tZWFucyA8LSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjYsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgNC4gT24gdGhlIHdob2xlLCBwYXJ0aWNpcGFudHMnIGFzc2Vzc21lbnRzIG9mIHRoZXNlIHR3byAiZWRnZSBjYXNlcyIgaW4gU3R1ZHkgNCB3ZXJlIHNpbWlsYXIgdG8gdGhvc2Ugb2YgYWR1bHRzJyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyLgoKQXMgaW4gU3R1ZHkgMiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgYm90aCBjaGlsZHJlbiBhbmQgYWR1bHRzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIGNoYXJhY3RlcikgdG8gYmUgYSBiZWluZyB3aXRoIGEgbW9kZXJhdGVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAiYmVldGxlIilgKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLiBBZHVsdHMgZ3JhbnRlZCByZWxhdGl2ZWx5IGxpdHRsZSBpbiB0aGUgd2F5IG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIHRoZSBiZWV0bGUgKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCAiYmVldGxlIilgKSwgYnV04oCUd2l0aCB0aGUgb2xkZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMuKAlGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLgoKRm9yIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSBjaGFyYWN0ZXIpIGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgaW5kaWNhdGVkIGEgbW9kZXJhdGUgZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAicm9ib3QiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2IiwgInJvYm90IilgKSwgYW5kIGFwcGVhcmVkIHRvIGFncmVlIHRoYXQgdGhlIHJvYm90IGhhZCBsZXNzIGluIHRoZSB3YXkgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGFuIHRoZSBiZWV0bGUuIEhvd2V2ZXIsIGVjaG9pbmcgdGhlIHJlc3VsdHMgb2YgU3R1ZHkgMiwgdGhlIHR3byBhZ2UgZ3JvdXBzIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIHRoZSBhYnNvbHV0ZSBkZWdyZWUgb2YgQk9EWSBhbmQgSEVBUlQgdGhhdCB0aGV5IHdlcmUgd2lsbGluZyB0byBncmFudCB0aGUgcm9ib3Q6IEFkdWx0cyBncmFudGVkIHZlcnkgbGl0dGxlIGluIGVpdGhlciBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJyb2JvdCIpYCksIHdoaWxlIGNoaWxkcmVuIGdyYW50ZWQgbWlkZGxpbmcgYWJpbGl0aWVzIGluIGJvdGggZG9tYWlucyAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWApLgoKYGBge3J9CmZpZ3VyZTUuNl9wbG90cyA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90X2FnZSgKICBkZl9zY29yZWQgPSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNDYiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA0LTV5IiwgIkFkdWx0cyIpLAogIHBsb3RfbWFyZ191cHBlciA9IC00NSwgYXhpc19oZWlnaHQgPSAwLjA5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjZfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS42X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuNjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyBjaGlsZHJlbiAoNC01eSkgYW5kIGFkdWx0cyBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGFuZCAoQikgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgOTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuNl9wbG90c19jYXApCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9CT0RZIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9CT0RZIikKCnJfZDRfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9IRUFSVCIpCgpyX2Q0X2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIk1JTkQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2Z3BfTUlORCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfTUlORCIpCgpyX2Q0X2RldmdwX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9NSU5EIikKCnN1bW1hcnkocl9kNF9kZXZncF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDRfZGV2Z3AgPC0gcmVndGFiX2RldmdwX2Z1bigKICByZWdfYm9keSA9IHJfZDRfZGV2Z3BfQk9EWSwgCiAgcmVnX2hlYXJ0ID0gcl9kNF9kZXZncF9IRUFSVCwKICByZWdfbWluZCA9IHJfZDRfZGV2Z3BfTUlORCwKICBhZ2VfbGV2ZWxzID0gYygiYWdlX2dyb3VwX2NoaWxkIiksIAogIGFnZV9sYWJlbHMgPSBjKCJDaGlsZHJlbiB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS41IDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDRfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuNSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSA0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS41CmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2Ugb3ZlcmFsbCBpbXByZXNzaW9ucywgeWllbGRpbmcgcmVtYXJrYWJseSBzaW1pbGFyIHJlc3VsdHMgdG8gdGhlIHBhcmFsbGVsIGNvbXBhcmlzb24gYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4gCgpBcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuNSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90IChzZWUgRmlndXJlIDUuNiwgdG9wIHJvdyk7IGFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCB3YXMgYXR0ZW51YXRlZCBhbW9uZyBjaGlsZHJlbiwgcmVsYXRpdmUgdG8gYWR1bHRzIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQWdhaW4sIGFzIGluIFN0dWR5IDIsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjUsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS42LCBtaWRkbGUgcm93KS4gSW4gU3R1ZHkgNCwgdGhpcyBkaWZmZXJlbmNlIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyB3YXMgc2xpZ2h0bHkgbW9yZSBwcm9ub3VuY2VkIGZvciB0aGUgcm9ib3QgdGhhbiB0aGUgYmVldGxlIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQW5kIHlldCBhZ2FpbiwgYXMgaW4gU3R1ZHkgMiwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuNSBhbmQgRmlndXJlIDUuNiwgYm90dG9tIHJvdykKCiMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtNXkKCkhlcmUsIEkgZXhwbG9yZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIGNoYW5nZSBvdmVyIHRoZSBhZ2UgcmFuZ2UgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeT8gVW5saWtlIFN0dWRpZXMgMi0zLCB3aGljaCBlYWNoIGluY2x1ZGVkIGEgcmVsYXRpdmVseSB3aWRlIGFnZSByYW5nZSAoNy05eSBpbiBTdHVkeSAyOyA0LTl5IGluIFN0dWR5IDMpLCB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIFN0dWR5IDQgd2FzIHJlbGF0aXZlbHkgbmFycm93LCByZW5kZXJpbmcgaXQgbGVzcyBsaWtlbHkgdG8gb2JzZXJ2ZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcy4gTm9uZXRoZWxlc3MsIGJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucywgSSBleHBlY3RlZCB0aGF0IHRoZSBtb3N0IGxpa2VseSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB0byBlbWVyZ2Ugd291bGQgYmUgZm9yIGluY3JlYXNlcyBpbiBhZ2UgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGxvd2VyIF9CT0RZXyBzY29yZXMsIHBhcnRpY3VsYXJseSBmb3IgdGhlIHJvYm90OyBhbmQgd2l0aCBsb3dlciBfSEVBUlRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycy4KCmBgYHtyfQpwbG90c19kNF9kZXYgPC0gY2hhcmFjdGVyX2RldnBsb3QoZGZfc2NvcmVkX2FkID0gZDRfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX3Njb3JlZF9jaCA9IGQ0XzQ2X3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9hZ2UgPSBkNF80NikKYGBgCgpgYGB7cn0KZmlndXJlNS43IDwtIHBsb3RzX2Q0X2RldiArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuN19wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjcsIHN0cl93cmFwKCJGaWd1cmUgNS43OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41fQpnZ2RyYXcoZmlndXJlNS43X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDRfNDZhZ2Vfc2NvcmVkX2FkIDwtIGQ0XzQ2X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDRfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDRfNDZhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkNF80NmFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0JPRFkiKQoKcl9kNF9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2c2NvcmVfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0hFQVJUIikKCnJfZDRfZGV2c2NvcmVfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZzY29yZV9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9NSU5EIikKCnJfZDRfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2Q0X2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kNF9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2Q0X2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDRfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjYgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kNF9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS42IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDRfNDYkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmVmX3N1YmlkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS42CmBgYAoKSG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBkaWZmZXJlbmNlcyB3YXMgcHJlc2VudCBpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gSW5zdGVhZCwgdGhlIG9ubHkgcmVsaWFibGUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZSB0byBlbWVyZ2Ugd2FzIGFuIGluY3JlYXNpbmcgZGlmZmVyZW50aWF0aW9uIG9mIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCBpbiB0aGUgQk9EWSBkb21haW4sIGRyaXZlbuKAlHN1cnByaXNpbmdseeKAlGJ5IGFuIF9pbmNyZWFzZV8gaW4gX0JPRFlfIHNjb3JlcyBmb3IgdGhlIGJlZXRsZSAocmF0aGVyIHRoYW4gYSBkZWNyZWFzZSBpbiBfQk9EWV8gc2NvcmVzIGZvciB0aGUgcm9ib3QpLiBTZWUgRmlndXJlIDUuNywgYW5kIHNlZSBUYWJsZSA1LjYgZm9yIHRoZSBmdWxsIHJlc3VsdHMgb2YgdGhlc2UgcmVncmVzc2lvbiBhbmFseXNlcy4gCgojIyBEaXNjdXNzaW9uCgpYWCBfX0lOU0VSVCBESVNDVVNTSU9OX18KCk9VVExJTkU6CgphZHVsdHM6IAoKICAtIGxpa2Ugc3R1ZGllcyAyLTMsIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIHN0cm9uZ2VzdCBpbiB0aGUgQk9EWSBkb21haW4KICAtIGxpa2Ugc3R1ZHkgMSwgZWRnZSBjYXNlcyBub3QgZ3JhbnRlZCBtdWNoIEhFQVJULCBidXQgYm90aCBncmFudGVkIGZhaXIgYW1vdW50IG9mIE1JTkQKICAgIApjaGlsZHJlbjoKCi0gQk9EWTogCiAgICAtIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGluIHBsYWNlIGV2ZW4gaW4geW91bmdlc3QgYWdlIGdyb3VwIChsaWtlIHN0dWRpZXMgMi0zKQogICAgLSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBiZWNvbWVzIG1vcmUgY2xlYXIvcm9idXN0IHdpdGggYWdlIChsaWtlIHN0dWRpZXMgMi0zKSAtIGJ1dCBkcml2ZW4gYnkgSU5DUkVBU0UgZm9yIHRoZSBiZWV0bGUgKHJhdGhlciB0aGFuIGRlY3JlYXNlIGZvciB0aGUgcm9ib3QpCi0gSEVBUlQ6IAogICAgLSBsaWtlIHN0dWRpZXMgMi0zLCBzdWJzdGFudGlhbCBjaGlsZCB2cy4gYWR1bHQgZGlmZmVyZW5jZXMgKGNoaWxkcmVuID4gYWR1bHRzKSwgYW5kIG5vIGRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIHRhcmdldCBjaGFyYWN0ZXJzCiAgICAtICguLi5idXQgbm90IHJlZmxlY3RlZCBpbiBhZ2UgZGlmZnMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGUpCi0gTUlORDogCiAgICAtIGxpa2UgYWR1bHRzIGFuZCBsaWtlIHN0dWRpZXMgMi0zLCBjdXRzIGFjcm9zcyBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbgogICAgLSBubyBhZ2UgZGlmZmVyZW5jZXMgLSBDLkYuIHN0dWR5IDIKCgojIEdlbmVyYWwgZGlzY3Vzc2lvbgoKYGBge3J9CnNjb3Jlc19hbGxfY2VudGVyZWRfbG9uZyA8LSBzY29yZXNfYWxsICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbGVmdF9qb2luKHNjb3Jlc19hbGwgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHN0dWR5LCBhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIpICU+JSAKICAgICAgICAgICAgICBjb3VudChzdHVkeSwgYWdlX2dyb3VwKSAlPiUKICAgICAgICAgICAgICByZW5hbWUobl9kYXRhcG9pbnRzID0gbikpICU+JQogIG11dGF0ZShzY29yZV9jZW50ZXJlZDAuNSA9IHNjb3JlIC0gMC41LAogICAgICAgICBkZXNpZ24gPSBjYXNlX3doZW4oCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxYSIsICJTdHVkeSAxYiIsICJTdHVkeSAyIikgfiAKICAgICAgICAgICAgICJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFjIiwgIlN0dWR5IDQiKSB+IAogICAgICAgICAgICAgImVkZ2UgY2FzZSAod2l0aGluLVNzKSIsCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxZCIsICJTdHVkeSAzIikgfiAKICAgICAgICAgICAgICJkaXZlcnNlIGNoYXJhY3RlcnMgKGJldHdlZW4tU3MpIiksCiAgICAgICAgIGRlc2lnbiA9IGZhY3RvcihkZXNpZ24sIAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZWRnZSBjYXNlIChiZXR3ZWVuLVNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGdlIGNhc2UgKHdpdGhpbi1TcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2ZXJzZSBjaGFyYWN0ZXJzIChiZXR3ZWVuLVNzKSIpKSkKCnNjb3Jlc19hbGxfY2VudGVyZWRfd2lkZSA8LSBzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKGZhY3Rvciwgc2NvcmVfY2VudGVyZWQwLjUpCgojIGNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmckYWdlX2dyb3VwKQpjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nJGZhY3RvcikgPC0gY29udHJhc3RzX2R1bTNfZmFjdG9yCmNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmckYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCgojIGNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX3dpZGUkYWdlX2dyb3VwKQpjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF93aWRlJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQpzY29yZXNfc3VtIDwtIHNjb3Jlc19hbGxfY2VudGVyZWRfd2lkZSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN0dWR5LCBhbmltX2luYW4pICU+JQogIHN1bW1hcmlzZShtZWFuX0IgPSBtZWFuKEJPRFkpLAogICAgICAgICAgICBtZWFuX0ggPSBtZWFuKEhFQVJUKSwKICAgICAgICAgICAgbWVhbl9NID0gbWVhbihNSU5EKSwKICAgICAgICAgICAgIyB2YXJfQiA9IHZhcihCT0RZKSwKICAgICAgICAgICAgIyB2YXJfSCA9IHZhcihIRUFSVCksCiAgICAgICAgICAgICMgdmFyX00gPSB2YXIoTUlORCksCiAgICAgICAgICAgIHNkX0IgPSBzZChCT0RZKSwKICAgICAgICAgICAgc2RfSCA9IHNkKEhFQVJUKSwKICAgICAgICAgICAgc2RfTSA9IHNkKE1JTkQpLAogICAgICAgICAgICByX0JIID0gY29yKEJPRFksIEhFQVJUKSwKICAgICAgICAgICAgcl9CTSA9IGNvcihCT0RZLCBNSU5EKSwKICAgICAgICAgICAgcl9ITSA9IGNvcihIRUFSVCwgTUlORCkpICU+JQogIGZpbHRlcighZ3JlcGwoIlN0dWR5IDEiLCBzdHVkeSkpICU+JQogIHNlbGVjdChzdHVkeSwgYW5pbV9pbmFuLCBhZ2VfZ3JvdXAsIAogICAgICAgICBlbmRzX3dpdGgoIl9CIiksIGVuZHNfd2l0aCgiX0giKSwgZW5kc193aXRoKCJfTSIpLAogICAgICAgICBzdGFydHNfd2l0aCgicl8iKSkgJT4lCiAgYXJyYW5nZShzdHVkeSwgYW5pbV9pbmFuLCBhZ2VfZ3JvdXApICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQp0YWJsZTUuNyA8LSBzY29yZXNfc3VtICU+JQogIHNlbGVjdCgtc3R1ZHkpICU+JQogIHJlbmFtZSgiQk9EWSB2cy4gSEVBUlQiID0gcl9CSCwgCiAgICAgICAgICJCT0RZIHZzLiBNSU5EIiA9IHJfQk0sIAogICAgICAgICAiSEVBUlQgdnMuIE1JTkQiID0gcl9ITSwKICAgICAgICAgIkFuaW1hY3kgc3RhdHVzIiA9IGFuaW1faW5hbiwgCiAgICAgICAgICJBZ2UgZ3JvdXAiID0gYWdlX2dyb3VwKSAlPiUKICByZW5hbWVfYXQodmFycyhzdGFydHNfd2l0aCgibWVhbl8iKSwgc3RhcnRzX3dpdGgoInNkXyIpKSwKICAgICAgICAgICAgZnVucyhnc3ViKCJfLiokIiwgIiIsIC4pKSkgJT4lCiAga2FibGUoZGlnaXRzID0gMikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGNvbHVtbl9zcGVjKHNlcSgzLCA5LCAyKSwgYm9yZGVyX2xlZnQgPSBUKSAlPiUKICBjb2xsYXBzZV9yb3dzKDEsIHZhbGlnbiA9ICJ0b3AiKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAyIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMyIsIDUsIDEwKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSA0IiwgMTEsIDE0KSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMiwgIkJPRFkiID0gMiwgIkhFQVJUIiA9IDIsICJNSU5EIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJDb3JyZWxhdGlvbnMgKFBlYXJzb24ncyByKSIgPSAzKSkKCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuNwpgYGAKCmBgYHtyfQpzY2F0dGVyX2tleSA8LSBzY29yZXNfYWxsICU+JQogIGRpc3RpbmN0KHN0dWR5LCBhZ2VfZ3JvdXAsIGNoYXJhY3RlcikgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBjb3VudChzdHVkeSwgYWdlX2dyb3VwLCBhbmltX2luYW4pICU+JQogIG11dGF0ZShjaGFyYWN0ZXJfbGlzdCA9IGNhc2Vfd2hlbigKICAgIGFuaW1faW5hbiA9PSAiYW5pbWF0ZSIgJiBuID09IDEgfiAiYmVldGxlIiwKICAgIGFuaW1faW5hbiA9PSAiaW5hbmltYXRlIiAmIG4gPT0gMSB+ICJyb2JvdCIsCiAgICBuID4gMSB+IHBhc3RlMCgidmFyaW91cyAobj0iLCBuLCAiKSIpKSkKYGBgCgpgYGB7cn0Kc2NvcmVfYWxsX21iIDwtIHNjb3Jlc19hbGwgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBncm91cF9ieShzdHVkeSwgYWdlX2dyb3VwLCBhbmltX2luYW4sIGZhY3RvcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnYXRoZXIoa2V5LCB2YWx1ZSwgYyhjaV9sb3dlciwgY2lfdXBwZXIsIG1lYW4pKSAlPiUKICB1bml0ZShmYWN0b3Jfa2V5LCBjKGZhY3Rvciwga2V5KSkgJT4lCiAgc3ByZWFkKGZhY3Rvcl9rZXksIHZhbHVlKSAlPiUKICByZW5hbWVfYWxsKGZ1bnMoZ3N1YigiX21lYW4iLCAiIiwgLikpKQpgYGAKClhYIF9fSU5UUk9EVUNFIEdFTkVSQUwgRElTQ1VTU0lPTl9fCgpJbiB0aGlzIGZpbmFsIHNlY3Rpb24sIEkgYWltIHRvIGltcGFydCB0byB0aGUgcmVhZGVyIGEgc2Vuc2Ugb2YgdGhlIGJpZ2dlciBwaWN0dXJlIGluIHRoZSBkZXZlbG9wbWVudCBvZiBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHRvIGFuaW1hdGUgYmVpbmdzIGFuZCBpbmFuaW1hdGUgb2JqZWN0cy4gCgojIyBBbiBhZHVsdCBlbmRwb2ludAoKVGFrZW4gdG9nZXRoZXIsIHRoZXNlIHN0dWRpZXMgc2hlZCBuZXcgbGlnaHQgb24gdGhlIHJvbGUgb2YgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZlIGluIGFkdWx0cycgZGlzdGluY3Rpb24gYmV0d2VlbiBhbmltYXRlIGJlaW5ncyBhbmQgaW5hbmltYXRlIG9iamVjdHMuIFRoZXNlIGZpbmRpbmdzIGFyZSBwZXJoYXBzIGVhc2llc3QgdG8gdW5kZXJzdGFuZCBpbiB0ZXJtcyBvZiB0aGUgdmlzdWFsaXphdGlvbnMgb2YgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjb3JlcyBmb3IgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgcHJlc2VudGVkIGluIEZpZ3VyZXMgNS44IGFuZCA1LjkuIAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjZ9CmZpZ3VyZTUuOF9wbG90IDwtIGdncGxvdChzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcsCiAgICAgICBhZXMoeCA9IHN0dWR5LCB5ID0gc2NvcmUsIGdyb3VwID0gYW5pbV9pbmFuLCBjb2xvciA9IGFuaW1faW5hbiwKICAgICAgICAgICBzaGFwZSA9IGRlc2lnbikpICsKICBmYWNldF9ncmlkKGFnZV9ncm91cCB+IGZhY3RvcikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjEsIHNoYXBlID0gImNpcmNsZSIsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gMC43NSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGRlc2lnbiwgc3R1ZHksIGFnZV9ncm91cCwgZmFjdG9yLCBhbmltX2luYW4pICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAzLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43NSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIlZhcmlhbnQgb2YgZXhwZXJpbWVudGFsIGFwcHJvYWNoIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygxNiwgMTUsIDE3KSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnMoeCA9ICJTdHVkeSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjhfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS44X3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgNS44OiBEaWZmZXJlbnRpb24gb2YgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gcGFydGljaXBhbnRzJyBlbmRvcnNlbWVudHMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzLCB1c2luZyBhZHVsdHMnIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY2FsZXMgZm9yIGFsbCBzYW1wbGVzLiBJbiBTdHVkaWVzIDFhLCAxYiwgYW5kIDIsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIGFuIGFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlKSBvciBhbiBpbmFuaW1hdGUgZWRnZSBjYXNlIChhIHJvYm90KS4gSW4gU3R1ZHkgMWMgYW5kIFN0dWR5IDQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgYm90aCBhbiBhbmltYXRlIGFuZCBhbiBpbmFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlIGFuZCBhIHJvYm90KS4gSW4gU3R1ZHkgMWQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiAxNyBhbmltYXRlIGJlaW5ncyAoYWR1bHQsIGNoaWxkLCBpbmZhbnQsIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgZmV0dXMsIGNoaW1wYW56ZWUsIGVsZXBoYW50LCBkb2xwaGluLCBiZWFyLCBkb2csIGdvYXQsIG1vdXNlLCBmcm9nLCBibHVlIGpheSwgZmlzaCwgYmVldGxlLCBvciBtaWNyb2JlKSBvciBvbmUgb2YgZm91ciBpbmFuaW1hdGUgb2JqZWN0cyAocm9ib3QsIGNvbXB1dGVyLCBjYXIsIHN0YXBsZXIpOyBzaW1pbGFybHksIGluIFN0dWR5IDMsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiBmaXZlIGFuaW1hdGUgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXIpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgYmxhY2sgcG9pbnRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiIsIDEzMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC44fQpnZ2RyYXcoZmlndXJlNS44X2NhcCkKYGBgCgpgYGB7cn0Kcl9hbmltIDwtIGxtZXIoc2NvcmVfY2VudGVyZWQwLjUgfiBmYWN0b3IgKiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAgKwogICAgICAgICAgICAgICAgICgxIHwgc3R1ZHkvc3ViaWQpICsgKDEgfCBjaGFyYWN0ZXIpLAogICAgICAgICAgICAgICBkYXRhID0gc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nICU+JQogICAgICAgICAgICAgICAgIGZpbHRlcighZ3JlcGwoIlN0dWR5IDEiLCBzdHVkeSkpKQoKc3VtbWFyeShyX2FuaW0pCmBgYAoKRmlyc3QsIGluIHRoZSBhZ2dyZWdhdGUsIHRoZSBsYXJnZXN0IGFuZCBtb3N0IHJvYnVzdCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbnMgYW1vbmcgYWR1bHRzIGluIHRoZXNlIHN0dWRpZXMgd2VyZSBpbiB0aGUgQk9EWSBkb21haW4sIGZvciB3aGljaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHNwYW5uZWQgYXQgbGVhc3QgaGFsZiBvZiB0aGUgMC0xIHNjYWxlIGFjcm9zcyBhbGwgb2YgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb24gKHNlZSBGaWd1cmUgNS44LCB0b3Agcm93KS4gQSBCYXllc2lhbiByZWdyZXNzaW9uIGFuYWx5c2lzIGNvbmZpcm1lZCB0aGF0IGFkdWx0IHBhcnRpY2lwYW50IGRpc3Rpbmd1aXNoZWQgc3Ryb25nbHkgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBpbiB0aGVpciBfQk9EWV8gc2NvcmVzIChzZWUgWFggbWFpbiBlZmZlY3QgaW4gVGFibGUgWFgpOyBjb2xsYXBzaW5nIGFjcm9zcyBzdHVkaWVzIHRoaXMgZGlzdGluY3Rpb24gd2FzIHN0aWxsIHByZXNlbnQsIGJ1dCBzdWJzdGFudGlhbGx5IGRpbWluaXNoZWQsIGluIHRoZSBIRUFSVCBhbmQgTUlORCBkb21haW5zIChzZWUgWFggaW50ZXJhY3Rpb25zIGluIFRhYmxlIFhYKS4gVmlzdWFsIGluc3BlY3Rpb24gb2YgRmlndXJlIDUuOCAodG9wIHJvdykgc3VnZ2VzdHMgdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIF9CT0RZXyBzY29yZXMgd2FzIHF1aXRlIGNvbnNpc3RlbnQgYWNyb3NzIHN0dWRpZXMsIHdoaWxlIGRpZmZlcmVuY2VzIGluIF9IRUFSVF8gYW5kIF9NSU5EXyBzY29yZXMgdmFyaWVkIHJhdGhlciBkcmFtYXRpY2FsbHkuIChTZWUgYWxzbyB0aGUgIlJvYm90IHZzLiBHTSIgYW5kICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIiByb3dzIGluIFRhYmxlcyA1LjEsIDUuMywgYW5kIDUuNSBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBhbW9uZyBhZHVsdHMgZWFjaCBzdHVkeSBzZXBhcmF0ZWx5LikKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpzY2F0dGVyXzQ2IDwtIHNjYXR0ZXJfcGxvdF9mdW4od2hpY2hfYWdlX2dyb3VwID0gIkNoaWxkcmVuLCA0LTZ5IikKc2NhdHRlcl83OSA8LSBzY2F0dGVyX3Bsb3RfZnVuKHdoaWNoX2FnZV9ncm91cCA9ICJDaGlsZHJlbiwgNy05eSIpCnNjYXR0ZXJfYWQgPC0gc2NhdHRlcl9wbG90X2Z1bih3aGljaF9hZ2VfZ3JvdXAgPSAiQWR1bHRzIikKYGBgCgpgYGB7cn0KZmlndXJlNS45X3Bsb3RzIDwtIHBsb3RfZ3JpZCgKICBwbG90X2dyaWQoc2NhdHRlcl80NiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICBzY2F0dGVyXzc5ICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgZ2V0X2xlZ2VuZChzY2F0dGVyXzQ2ICsgCiAgICAgICAgICAgICAgIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIoZGlyZWN0aW9uID0gInZlcnRpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAxNSwgYmFyd2lkdGggPSAwLjgpKSksCiAgICAgICAgICAgIG5jb2wgPSA0LCByZWxfd2lkdGhzID0gYygxLCAxLCAwLjMsIDAuNzUpLCBsYWJlbHMgPSBjKCJBIiwgIkIiLCAiIikpLAogIHBsb3RfZ3JpZChzY2F0dGVyX2FkICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgbGFiZWxzID0gIkMiKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDEpKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjlfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS45X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuOTogUGFydGljaXBhbnRzJyBlbmRvcnNlbWVudHMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGZvciBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycywgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIGZvciBhbGwgc2FtcGxlcy4gKEEpIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZGllcyAzIGFuZCA0LiAoQikgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkaWVzIDIgYW5kIDMuIChDKSBBZHVsdHMgaW4gU3R1ZGllcyAxLTQuIEluIFN0dWRpZXMgMWEsIDFiLCBhbmQgMiwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgYW4gYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUpIG9yIGFuIGluYW5pbWF0ZSBlZGdlIGNhc2UgKGEgcm9ib3QpLiBJbiBTdHVkeSAxYyBhbmQgU3R1ZHkgNCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBib3RoIGFuIGFuaW1hdGUgYW5kIGFuIGluYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLiBJbiBTdHVkeSAxZCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIDE3IGFuaW1hdGUgYmVpbmdzIChhZHVsdCwgY2hpbGQsIGluZmFudCwgcGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlLCBmZXR1cywgY2hpbXBhbnplZSwgZWxlcGhhbnQsIGRvbHBoaW4sIGJlYXIsIGRvZywgZ29hdCwgbW91c2UsIGZyb2csIGJsdWUgamF5LCBmaXNoLCBiZWV0bGUsIG9yIG1pY3JvYmUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBvYmplY3RzIChyb2JvdCwgY29tcHV0ZXIsIGNhciwgc3RhcGxlcik7IHNpbWlsYXJseSwgaW4gU3R1ZHkgMywgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIGZpdmUgYW5pbWF0ZSBjaGFyYWN0ZXJzIChlbGVwaGFudCwgZ29hdCwgbW91c2UsIGJpcmQsIG9yIGJlZXRsZSkgb3Igb25lIG9mIGZvdXIgaW5hbmltYXRlIGNoYXJhY3RlcnMgKHRlZGR5IGJlYXIsIGRvbGwsIHJvYm90LCBvciBjb21wdXRlcikuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAxNTUpLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuODV9CmdnZHJhdyhmaWd1cmU1LjlfY2FwKQpgYGAKCkJleW9uZCB0aGlzLCB0aGVyZSBhcHBlYXIgdG8gYmUgaGF2ZSBiZWVuIGRpZmZlcmVuY2VzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gdGhlIF92YXJpYWJpbGl0eV8gb2YgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYXR0cmlidXRpb25zLiBJbiBlYWNoIHN0dWR5LCBhZHVsdHMnIGF0dHJpYnV0aW9ucyBvZiB0byBhbmltYXRlIGJlaW5ncyB2YXJpZWQgd2lkZWx5IGFsb25nIGFsbCB0aHJlZSBkaW1lbnNpb25zOiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgKHNlZSBGaWd1cmUgNS44LCB0b3Agcm93LCBGaWd1cmUgNS45LCBwYW5lbCBDLCB0b3Agcm93LCBhbmQgVGFibGUgNS43IGZvciBzdGFuZGFyZCBkZXZpYXRpb25zIGFjcm9zcyBzdHVkeSwgYW5pbWFjeSBzdGF0dXMsIGFuZCBkb21haW4pLiBUaGlzIHZhcmlhYmlsaXR5IGhhcyBzZXZlcmFsIHBvc3NpYmxlIHNvdXJjZXMsIGluY2x1ZGluZyBkaWZmZXJlbmNlcyBpbiBvcGluaW9ucyBvciBiZWxpZWZzIGFjcm9zcyBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyAoZXNwZWNpYWxseSByZWxldmFudCBmb3IgYXR0cmlidXRpb25zIHRvIHRoZSBhbmltYXRlICJlZGdlIGNhc2Ui4oCUdGhlIGJlZXRsZeKAlGluIFN0dWRpZXMgMWEsIDFiLCAxYywgMiwgYW5kIDQpLCBhcyB3ZWxsIGFzIGRpZmZlcmVuY2VzIGluIHRoZSAocGVyY2VpdmVkKSBtZW50YWwgY2FwYWNpdHkgcHJvZmlsZXMgb2YgZGlmZmVyZW50IGFuaW1hdGUgYmVpbmdzIChlc3BlY2lhbGx5IHJlbGV2YW50IGZvciBhdHRyaWJ1dGlvbnMgdG8gdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIGZlYXR1cmVkIGluIFN0dWR5IDFkIGFuZCBTdHVkeSAzKS4gTW9yZW92ZXIsIHRoZXNlIGF0dHJpYnV0aW9ucyBhcHBlYXIgdG8gaGF2ZSB2YXJpZWQgaW4gdGFuZGVtIChzZWUgVGFibGUgNS43IGFuZCBGaWd1cmUgNS45KS4gX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVzIGZvciBhbmltYXRlIGJlaW5ncyB3ZXJlIHBhcnRpY3VsYXJseSBzdHJvbmdseSBjb3JyZWxhdGVkIChQZWFyc29uJ3MgciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0JNIilgIGFjcm9zcyBTdHVkaWVzIDItNCksIGFuZCBzY29yZXMgZm9yIGVhY2ggb2YgdGhlc2UgbW9yZSAiYmFzaWMiIGNvbmNlcHR1YWwgdW5pdHMgKHBlciBDaGFwdGVyIElWKSB3ZXJlIGFsc28gY29ycmVsYXRlZCBxdWl0ZSBzdHJvbmdseSB3aXRoIF9IRUFSVF8gc2NvcmVzIChCT0RZIHZzLiBIRUFSVDogciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0JIIilgOyBNSU5EIHZzLiBIRUFSVDogciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0hNIilgKS4gSW5kZWVk4oCUdG8gcGljayB1cCBvbiBhIHRocmVhZCBmcm9tIHRoZSBHZW5lcmFsIERpc2N1c3Npb24gaW4gQ2hhcHRlciBJVuKAlGF0dHJpYnV0aW9ucyBvZiBIRUFSVCB0byBhbmltYXRlIGJlaW5ncyBhcHBlYXIgdG8gaGF2ZSBiZWVuIF9qb2ludGx5XyBkZXBlbmRlbnQgb24gYXR0cmlidXRpb25zIG9mIF9ib3RoXyBCT0RZIGFuZCBNSU5EOyBzZWUgRmlndXJlIDUuOSwgcGFuZWwgQywgaW4gd2hpY2ggc3Ryb25nIF9IRUFSVF8gc2NvcmVzIGFyZSBwcmVzZW50IG9ubHkgYW1vbmcgcGFydGljaXBhbnRzIHdobyByZWNlaXZlZCBzdHJvbmcgX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVz4oCUaS5lLiwgcmVkZGlzaCBwb2ludHMgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSBwbG90IChhbmQgc2VlIFtYWCBBUFBFTkRJWCBDP10gZm9yIHJlbGV2YW50IHJlZ3Jlc3Npb24gYW5hbHlzZXMpLiAKCk1lYW53aGlsZSwgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgdG8gaW5hbmltYXRlIG9iamVjdHMgKEZpZ3VyZSA1LjksIHBhbmVsIEMsIGJvdHRvbSByb3cpIHZhcmllZCBwYXJ0aWN1bGFybHkgc3Ryb25nbHkgaW4gdGhlIE1JTkQgZG9tYWluLCBidXQgc2VlbWluZ2x5IGxlc3MgaW4gdGhlIGRvbWFpbnMgb2YgQk9EWSBhbmQgSEVBUlQgKHNlZSBhbHNvIFRhYmxlIDUuNykuIEFtb25nIGluYW5pbWF0ZSBvYmplY3RzLCBfQk9EWV8gYW5kIF9IRUFSVF8gc2NvcmVzIHdlcmUgcGFydGljdWxhcmx5IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgKFBlYXJzb24ncyByID0gYHIgc3RhdF9yYW5nZV9wcmludF9mdW4oIkFkdWx0cyIsICJpbmFuaW1hdGUiLCAicl9CSCIpYCBhY3Jvc3MgU3R1ZGllcyAyLTQp4oCUYnV0IGhpZ2ggc2NvcmVzIGluIGVpdGhlciBvZiB0aGVzZSB0d28gZG9tYWlucyB3ZXJlIHF1aXRlIHJhcmUuIFNjb3JlcyBmb3IgdGhlIHR3byBtb3JlICJiYXNpYyIgY29uY2VwdHVhbCB1bml0cyAocGVyIENoYXB0ZXIgSVYpLCBfQk9EWV8gYW5kIF9NSU5EXywgd2VyZSBvbmx5IHdlYWtseSBjb3JyZWxhdGVkIChQZWFyc29uJ3MgciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiaW5hbmltYXRlIiwgInJfQk0iKWAgYWNyb3NzIFN0dWRpZXMgMi00KSwgYW5kIF9NSU5EXyBhbmQgX0hFQVJUXyBzY29yZXMgd2VyZSB2aXJ0dWFsbHkgaW5kZXBlbmRlbnQgKE1JTkQgdnMuIEhFQVJUOiByID0gYHIgc3RhdF9yYW5nZV9wcmludF9mdW4oIkFkdWx0cyIsICJpbmFuaW1hdGUiLCAicl9ITSIpYCkuIChTZWUgW1hYIEFQUEVORElYIEM/XSBmb3IgcmVncmVzc2lvbiBhbmFseXNlcyBleHBsb3JpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIGpvaW50IGRlcGVuZGVuY3kgb2YgSEVBUlQgb24gQk9EWSBhbmQgTUlORCBhbW9uZyBpbmFuaW1hdGUgb2JqZWN0cy4pCgpJbiBzdW0sIHRoZXNlIHN0dWRpZXMgc3VnZ2VzdCB0aGF04oCUaW4gYWRkaXRpb24gdG8gYmlvbG9naWNhbCBwcm9wZXJ0aWVzIGxpa2UgaGF2aW5nIGJsb29kLCBkaWdlc3RpbmcgZm9vZCwgZ3Jvd2luZywgcmVwcm9kdWNpbmcsIGFuZCBkeWluZyBbWFggQ0lURSBHRUxNQU4gYW5kIG90aGVyc13igJRVUyBhZHVsdHMgZGlzdGluZ3Vpc2ggYW5pbWF0ZSBiZWluZ3MgZnJvbSBpbmFuaW1hdGUgb2JqZWN0cyBieSB0aGVpciBoaWdoIGRlZ3JlZSBvZiBwZXJjZWl2ZWQgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChCT0RZKeKAlGFuZCwgdG8gYSBsZXNzZXIgZGVncmVlLCB0aGVpciBzdXBlcmlvciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpIGFuZCBwZXJjZXB0dWFsIGNvZ25pdGl2ZSBhYmlsaXRpZXMgKE1JTkQpLiBBYm92ZSBhbmQgYmV5b25kIHBlcmNlaXZpbmcgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMgdG8gZGlmZmVyIGluIHRoZWlyICJhdmVyYWdlIiBtZW50YWwgY2FwYWNpdGllcywgYWR1bHRzIGluIHRoZXNlIHN0dWRpZXMgYWxzbyBhcHBlYXJlZCB0byBjb25jZXB0dWFsaXplIGFuaW1hdGUgYmVpbmdzIGFzIGVudGl0aWVzIHdobyBfdmFyeV8gcXVpdGUgZHJhbWF0aWNhbGx5IGluIGFsbCB0aHJlZSBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlLCBhbmQgZm9yIHdob20gdGhlc2UgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVudGFsIGxpZmUgbWF5IGJlIGNsb3NlbHkgcmVsYXRlZC4gSW4gY29udHJhc3QsIGluIHRoaXMgY29uc2Vuc3VzIHZpZXcgaW5hbmltYXRlIG9iamVjdHMgYXBwZWFyIHRvIGJlIHNlZW4gYXMgZW50aXRpZXMgdGhhdCB2YXJ5IG1vc3RseSBpbiB0aGVpciBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgKE1JTkQpLCB3aXRoIGNvbnNpc3RlbnRseSBsaXR0bGUgb2YgdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBvciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBvZiB0aGUgQk9EWSBhbmQgSEVBUlQuCgojIyBBIGRldmVsb3BtZW50YWwgdHJhamVjdG9yeQoKWFggX19GSUxMIElOX18KCgojIENoYXB0ZXIgY29uY2x1c2lvbgoKCg==